题意:n<=1e9

1,2,3,4,5,6.。。n

问你有多少个数字集合,不包含重复的数位

好题

数位dp 预处理 cnt【state】,然后背包

注意11这种,本身重复的也不行

ps:看了下别人的代码,好像满足条件的数并不太多,直接暴力dfs处理出cnt数组也可以

#include <cstdlib>
#include <cctype>
#include <cstring>
#include <cstdio>
#include <cmath>
#include <algorithm>
#include <vector>
#include <string>
#include <iostream>
#include <sstream>
#include <map>
#include <set>
#include <queue>
#include <stack>
#include <ctime>
using namespace std;class LittleElephantAndSubset
{
public: int getNumber(int N);// BEGIN CUT HEREpublic:void run_test(int Case) { if ((Case == -1) || (Case == 0)) test_case_0(); if ((Case == -1) || (Case == 1)) test_case_1(); if ((Case == -1) || (Case == 2)) test_case_2(); if ((Case == -1) || (Case == 3)) test_case_3(); }private:template <typename T> string print_array(const vector<T> &V) { ostringstream os; os << "{ "; for (typename vector<T>::const_iterator iter = V.begin(); iter != V.end(); ++iter) os << '\"' << *iter << "\","; os << " }"; return os.str(); }void verify_case(int Case, const int &Expected, const int &Received) { cerr << "Test Case #" << Case << "..."; if (Expected == Received) cerr << "PASSED" << endl; else { cerr << "FAILED" << endl; cerr << "\tExpected: \"" << Expected << '\"' << endl; cerr << "\tReceived: \"" << Received << '\"' << endl; } }void test_case_0() { int Arg0 = 3; int Arg1 = 7; verify_case(0, Arg1, getNumber(Arg0)); }void test_case_1() { int Arg0 = 10; int Arg1 = 767; verify_case(1, Arg1, getNumber(Arg0)); }void test_case_2() { int Arg0 = 47; int Arg1 = 25775; verify_case(2, Arg1, getNumber(Arg0)); }void test_case_3() { int Arg0 = 4777447; int Arg1 = 66437071; verify_case(3, Arg1, getNumber(Arg0)); }// END CUT HERE};// BEGIN CUT HERE
int main()
{LittleElephantAndSubset ___test;___test.run_test(-1);return 0;
}
// END CUT HERE
int cnt[1024];
bool vis[10];
int dig[15];
int dp[15][1024];
int now;
int dfs(int len,bool lim,bool pos,int state) {if(!len) return pos && state == now;if(!lim && pos && dp[len][state] != -1) return dp[len][state];int mx = lim ? dig[len-1] : 9;int ret = 0;for(int i = 0; i <= mx; i++) {if(vis[i]) {int tmp ;if(state & (1<<i)) continue;if(!pos && !i) tmp = state;else tmp = state | (1<<i);ret += dfs(len-1,lim&&i==mx,pos||i,tmp);}}if(!lim && pos) dp[len][state] = ret;return ret;
}
long long f[1024];
int LittleElephantAndSubset::getNumber(int N)
{int tot = 0;for(int t = N; t; t /= 10) dig[tot++] = t%10;memset(cnt,0,sizeof(cnt));for(int i = 0; i < 1024; i++) {memset(vis,false,sizeof(vis));vis[0] = true;for(int j = 0; j < 10; j++) if(i >> j & 1) {vis[j] = true;}now = i;memset(dp,-1,sizeof(dp));cnt[i] = dfs(tot,true,false,0);}memset(f,0,sizeof(f));f[0] = 1;for(int state = 1; state < 1024; state++) if(cnt[state]){for(int i = 0; i < 1024; i++)if(!(i&state)) {f[i|state] +=( f[i] * cnt[state]%1000000007 );f[i|state] %= 1000000007;}}int ans = 0;for(int i = 1; i < 1024; i++) {ans += f[i];if(ans >= 1000000007) ans -= 1000000007;}return ans;
}

SRM 597div2 1K相关推荐

  1. srm#397_div1_500pt 矩阵乘法+快速模幂

    题目地址:srm#397_div1_500 题目描述: Problem Statement   NOTE: This problem statement contains superscripts t ...

  2. centos8编译openssl-1.0.2u、openssl-1.1.1k

    目录 一.给openssl-1.0.2u打包rpm 二.编译安装openssl-1.1.1k 三.给openssl-1.1.1k打包rpm(不推荐!) 近日openssl爆出拒绝服务.证书绕过漏洞,C ...

  3. 不要上手就学深度学习!超详细的人工智能专家路线图,GitHub数天获2.1k星

    来源:机器之心 本文约1600字,建议阅读5分钟 这个学习路线图几乎涵盖了人工智能领域的所有内容,点点鼠标,就能链接所需知识. 想从事人工智能领域的研究,盲目地在网上购买了一本又一本的参考资料,学习视 ...

  4. SAP采购订单下传SRM

    http://www.cnblogs.com/rainysblog/p/6640515.html ZPOSRM 采购订单下传SRM *&---------------------------- ...

  5. 用VS Code直接浏览GitHub代码 | 12.1K星

    金磊 发自 凹非寺 量子位 报道 | 公众号 QbitAI "看GitHub代码"这件事上,还在网页上点点点? 用开发工具看代码,不香吗? 于是,它来了,它来了--可以直接用VS ...

  6. srm linux字符界面,如何使用srm安全的删除Linux中的文件

    在Linux平台上,有几个可能的工具可以完成此过程,其中一些工具不能用于删除此类信息,而另一些工具只能可靠地在磁性驱动器上工作.因此,如果您的服务器使用ssd,那么您需要确保使用适合该任务的工具.其中 ...

  7. Topcoder SRM 697题解

    Topcoder SRM 697题解 D1L1 分子分母同乘a[i]: \(a_{i}^{b_{i}+1} mod \prod a_i = 0\) 然后我们考虑质因子p,设质因子p在a[i]中出现cn ...

  8. SRM 583 DIV1

    A 裸最短路. 1 class TravelOnMars { 2 public: 3 int minTimes(vector <int>, int, int); 4 }; 5 vector ...

  9. axios拦截器_78.1K 的 Axios 项目有哪些值得借鉴的地方

    Axios 是一个基于 Promise 的 HTTP 客户端,同时支持浏览器和 Node.js 环境.它是一个优秀的 HTTP 客户端,被广泛地应用在大量的 Web 项目中. 由上图可知,Axios ...

最新文章

  1. Linux 计算某文件夹下的所有文件的md5值
  2. CentOS7安装bbr的正确姿势:更新到7.3,安装elrepo官方4.9正式版
  3. 计算机应用基础2010一级,2010年一级结构基础辅导:(计算机应用基础)备考讲义(10)...
  4. 机器学习专题(一):绪论
  5. java共同方法_java-现有公共方法的NoSuchMethodError
  6. rope 实用把一段区间的数字整体搬到序列中的一段的时候用
  7. 5.5 Transformers的改进--自适应Attention
  8. 一款好用的取色工具TakeColor.exe
  9. 序 - 致“正当时”
  10. 啦啦外卖最新版41.9啦啦外卖41.9版本全开源
  11. Zookeeper下载与安装教程(for windows)
  12. EDM大师独家收藏的30个绝佳节日邮件模板
  13. vue axios封装 类方法
  14. MV* 模式梳理与理解(还原真实的 MV* 模式)
  15. JS滑动滚动的n种方式
  16. airflow的xcom使用
  17. 阿里云创建AccessKey 和 Access Key Secert
  18. 使用TWRP Recovery刷入CM13等第三方ROM教程
  19. 服务器 微信报警平台,Zabbix实现微信报警
  20. [官方Flink入门笔记 ] 五、客户端操作

热门文章

  1. org.apache.jasper.el.ELContextImpl cannot be cast to org.apache.jasper.el.ELContextImpl
  2. 叹20年奶茶江湖纷争,入局奶茶行业仍有机会
  3. 如何使公式和编号上下对齐?
  4. 基于halcon的二维椭圆测量实例
  5. enumerate使用
  6. 其实特简单,Python 做一个漂亮女孩词云跳舞的视频
  7. 哪些App适合用HTML5开发?
  8. 自定义 Drawable实现灵动红鲤鱼特效
  9. 痞子衡嵌入式:我被邀请做贸泽电子与非网联合推出的《对话工程师》节目嘉宾...
  10. phpspreadsheet 中文文档(七)技巧和诀窍