SRM 597div2 1K
题意: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相关推荐
- srm#397_div1_500pt 矩阵乘法+快速模幂
题目地址:srm#397_div1_500 题目描述: Problem Statement NOTE: This problem statement contains superscripts t ...
- 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 ...
- 不要上手就学深度学习!超详细的人工智能专家路线图,GitHub数天获2.1k星
来源:机器之心 本文约1600字,建议阅读5分钟 这个学习路线图几乎涵盖了人工智能领域的所有内容,点点鼠标,就能链接所需知识. 想从事人工智能领域的研究,盲目地在网上购买了一本又一本的参考资料,学习视 ...
- SAP采购订单下传SRM
http://www.cnblogs.com/rainysblog/p/6640515.html ZPOSRM 采购订单下传SRM *&---------------------------- ...
- 用VS Code直接浏览GitHub代码 | 12.1K星
金磊 发自 凹非寺 量子位 报道 | 公众号 QbitAI "看GitHub代码"这件事上,还在网页上点点点? 用开发工具看代码,不香吗? 于是,它来了,它来了--可以直接用VS ...
- srm linux字符界面,如何使用srm安全的删除Linux中的文件
在Linux平台上,有几个可能的工具可以完成此过程,其中一些工具不能用于删除此类信息,而另一些工具只能可靠地在磁性驱动器上工作.因此,如果您的服务器使用ssd,那么您需要确保使用适合该任务的工具.其中 ...
- Topcoder SRM 697题解
Topcoder SRM 697题解 D1L1 分子分母同乘a[i]: \(a_{i}^{b_{i}+1} mod \prod a_i = 0\) 然后我们考虑质因子p,设质因子p在a[i]中出现cn ...
- SRM 583 DIV1
A 裸最短路. 1 class TravelOnMars { 2 public: 3 int minTimes(vector <int>, int, int); 4 }; 5 vector ...
- axios拦截器_78.1K 的 Axios 项目有哪些值得借鉴的地方
Axios 是一个基于 Promise 的 HTTP 客户端,同时支持浏览器和 Node.js 环境.它是一个优秀的 HTTP 客户端,被广泛地应用在大量的 Web 项目中. 由上图可知,Axios ...
最新文章
- Linux 计算某文件夹下的所有文件的md5值
- CentOS7安装bbr的正确姿势:更新到7.3,安装elrepo官方4.9正式版
- 计算机应用基础2010一级,2010年一级结构基础辅导:(计算机应用基础)备考讲义(10)...
- 机器学习专题(一):绪论
- java共同方法_java-现有公共方法的NoSuchMethodError
- rope 实用把一段区间的数字整体搬到序列中的一段的时候用
- 5.5 Transformers的改进--自适应Attention
- 一款好用的取色工具TakeColor.exe
- 序 - 致“正当时”
- 啦啦外卖最新版41.9啦啦外卖41.9版本全开源
- Zookeeper下载与安装教程(for windows)
- EDM大师独家收藏的30个绝佳节日邮件模板
- vue axios封装 类方法
- MV* 模式梳理与理解(还原真实的 MV* 模式)
- JS滑动滚动的n种方式
- airflow的xcom使用
- 阿里云创建AccessKey 和 Access Key Secert
- 使用TWRP Recovery刷入CM13等第三方ROM教程
- 服务器 微信报警平台,Zabbix实现微信报警
- [官方Flink入门笔记 ] 五、客户端操作
热门文章
- org.apache.jasper.el.ELContextImpl cannot be cast to org.apache.jasper.el.ELContextImpl
- 叹20年奶茶江湖纷争,入局奶茶行业仍有机会
- 如何使公式和编号上下对齐?
- 基于halcon的二维椭圆测量实例
- enumerate使用
- 其实特简单,Python 做一个漂亮女孩词云跳舞的视频
- 哪些App适合用HTML5开发?
- 自定义 Drawable实现灵动红鲤鱼特效
- 痞子衡嵌入式:我被邀请做贸泽电子与非网联合推出的《对话工程师》节目嘉宾...
- phpspreadsheet 中文文档(七)技巧和诀窍