CCF 201312-4 有趣的数[dp][难]
问题描述
试题编号: | 201312-4 |
试题名称: | 有趣的数 |
时间限制: | 1.0s |
内存限制: | 256.0MB |
问题描述: |
问题描述
我们把一个数称为有趣的,当且仅当:
1. 它的数字只包含0, 1, 2, 3,且这四个数字都出现过至少一次。 2. 所有的0都出现在所有的1之前,而所有的2都出现在所有的3之前。 3. 最高位数字不为0。 因此,符合我们定义的最小的有趣的数是2013。除此以外,4位的有趣的数还有两个:2031和2301。 请计算恰好有n位的有趣的数的个数。由于答案可能非常大,只需要输出答案除以1000000007的余数。 输入格式
输入只有一行,包括恰好一个正整数n (4 ≤ n ≤ 1000)。
输出格式
输出只有一行,包括恰好n 位的整数中有趣的数的个数除以1000000007的余数。
样例输入
4
样例输出
3
|
题目大意:题目描述里都有了。
//肯定是用字符串读入,需要去形成这个数,而不是去一个一个的遍历,使用dfs生成每个数,但是每个数里边的0,1,2,3;这些变化是非常多的。这个真的难,
//发现这个数只能以2开头,不然就不符合条件。
代码转自:https://www.cnblogs.com/Outer-Haven/p/4688752.html
- #include <iostream>
- using namespace std;
- int main(){
- long long mod = ;
- long long n;
- cin>>n;
- // long long **states = new long long*[n+1];//申请n个二维指针
- // for(long long i =0;i<n+1;i++)
- // states[i]=new long long[6];//每一个数组中的元素都指向一个数组。
- long long states[][];
- for(long long i =;i<;i++)
- states[][i]=;//在长度为0时,每个状态的个数都是0.
- /**6种状态
- * 0--剩013
- * 1--剩13
- * 2--剩01
- * 3--剩3
- * 4--剩1 出现什么数能满足当前的状态,维持当前的状态。
- * 5--无 其实0 1 2 3 4这5种状态都是不满足题意的都是为了
- 计算出第5种状态长度为n的时候的长度。
- **/
- for(long long i=;i<=n;i++)
- {
- long long j = i-;
- states[i][] = ;//只放2那么肯定只有一种,也就是i个2.
- states[i][] = (states[j][] + states[j][] * ) % mod;
- //状态1可由状态0,在i位放0得到;可由自身状态1,在i位放1或3得到
- states[i][] = (states[j][] + states[j][]) % mod;
- //状态2可由状态0放3得到;可由自身状态放0或1得到
- states[i][] = (states[j][] + states[j][] * ) % mod;
- //状态3可由状态1,在i位放1得到,也可由自身,放2或者放1.
- states[i][] = (states[j][] + states[j][] + states[j][] * ) % mod;
- //状态4可由状态2,在i位放0得到;可由状态1放3得到,也可由自己放3或者0得到。
- states[i][] = (states[j][] + states[j][] + states[j][] * ) % mod;
- //状态5可由状态3,在i位放3得到;可由状态4在i位放1得到;可由状态5在i位放1,3得到。
- }
- cout<<states[n][];
- return ;
- }
//真的是挺难理解的。使用dp的思想。
1.其中states矩阵的申请,这个代码是用的动态申请了一个二维数组,实际上直接申请静态的就可以。但是也学习了如何申请动态二维数组,还挺复杂的。
2.申请动态二维数组:先申请一个指向指针的指针,指向一个n维指针数组的指针;并且for循环为每一个指针数组中的元素申请数组,指向其。
3.题目中有6种状态,需要好好理解
4.states数组用的很厉害,每一状态是怎么转化来的?或者是怎么维持的?以此来得到递推公式!
5.还有int提交时会有数据长度的限制, 职能的30,所以数组要申请为long long类型的!
//学习了!
CCF 201312-4 有趣的数[dp][难]的更多相关文章
- CCF CSP 201312-4 有趣的数
CCF计算机职业资格认证考试题解系列文章为meelo原创,请务必以链接形式注明本文地址 CCF CSP 201312-4 有趣的数 问题描述 我们把一个数称为有趣的,当且仅当: 1. 它的数字只包含0 ...
- CCF系列之有趣的数(201312-4)
题目链接: http://115.28.138.223:81/view.page?opid=4 试题名称: 有趣的数 时间限制: 1.0s 内存限制: 256.0MB 问题描述: 问题描述 我们把一个 ...
- CCF模拟题 有趣的数
有趣的数 时间限制: 1.0s 内存限制: 256.0MB 问题描述 我们把一个数称为有趣的,当且仅当: 1. 它的数字只包含0, 1, 2, 3,且这四个数字都出现过至少一次. 2. 所有的0都 ...
- [算法]美团春招笔试题C-求有趣子序列数(DP)
题目 输入n,以及长度为n的数组元素 输出数组的非空子序列中有多少个"有趣序列"mod 998244353,有趣序列指所有元素满足arr[i]%i == 0, i从0记. 例: 输 ...
- CCF 201312-4 有趣的数 (数位DP, 状压DP, 组合数学+暴力枚举, 推公式, 矩阵快速幂)
问题描述 我们把一个数称为有趣的,当且仅当: 1. 它的数字只包含0, 1, 2, 3,且这四个数字都出现过至少一次. 2. 所有的0都出现在所有的1之前,而所有的2都出现在所有的3之前. 3. 最高 ...
- CCF软考---《有趣的数》
脑子一热报了CCF的软测..但是又觉得好像并没有什么卵用,就当为蓝桥杯预热然后顺便去软件学院玩一玩吧,遇到一个有意思的题: time limits : 1s 问题描述 我们把一个数称为有趣的,当且仅当 ...
- CSP201312-4 有趣的数【dp】
问题描述 试题编号: 201312-4 试题名称: 有趣的数 时间限制: 1.0s 内存限制: 256.0MB 问题描述: 问题描述 我们把一个数称为有趣的,当且仅当: 1. 它的数字只包含0, 1, ...
- ccf 201312-04 有趣的数(组合数学)
问题描述 我们把一个数称为有趣的,当且仅当: 1. 它的数字只包含0, 1, 2, 3,且这四个数字都出现过至少一次. 2. 所有的0都出现在所有的1之前,而所有的2都出现在所有的3之前. 3. 最高 ...
- 有趣的数(number)
有趣的数(number) 题目描述 这些天 nodgd 在研究一类有趣的数.定义函数 f(n) f(n) f(n) 表示 n n n 在十进制表示下的数字之和.如果一个正整数 n n n 满足 f(n ...
随机推荐
- jsp中9个内置对象与servlet对应关系及四个作用域
参考: <jsp&servlet学习笔记.第2版.林信良><JSR-245 JavaServer Pages 2.2 Maintenance Release Specifi ...
- 【BZOJ】1684: [Usaco2005 Oct]Close Encounter(暴力+c++)
http://www.lydsy.com/JudgeOnline/problem.php?id=1684 这货完全在考精度啊.. 比如奇葩 (llf)a/b*i (llf)(a/b*i)和(llf)( ...
- jhipster(springboot+datatable+jpa)后台分页,总结
最近用datatable做了一个后台分页,但是后台实体原本没写DTO.就碰到的问题做了一下总结 一.datatable使用get方式传数据到后台,这是正常的后台分页,不涉及过滤查询和前端传递的排序字段 ...
- windows CMD命令大全及详细解释和语法
http://blog.csdn.net/god_7z1/article/details/51173067
- (转)python中的参数:*args和**kwargs
def foo(*args, **kwargs):print 'args = ', argsprint 'kwargs = ', kwargsprint '---------------------- ...
- gulp报错160
gulp报错: 这种提示,说明端口被占用,并且要改端口号,首先,我需要把Apache服务器关掉, 然后在gulpfile.js里: 把8080的端口号加进去.就解决了
- phpredis 中文手册和redis 教程
phpredis 中文手册 : http://www.cnblogs.com/zcy_soft/archive/2012/09/21/2697006.html 手册: http://www.cn ...
- 页面操作表单不会调用表单 value 属性的 set 函数
在 ES5 通过 Object.defineProperty 数据绑定可以监听数据的变化,实现类似的效果,demo 执行如图: 但是这样把 表单元素的 value 属性设置为 访问器属性 后,有个问题 ...
- Hibernate的时间戳缓存区域
时间戳:一个详细到秒的时间点,就是一个时分秒的字符串 时间戳缓存区域存放了对于查询结果相关的表进行插入, 更新或删除操作的时间戳. Hibernate 通过时间戳缓存区域来判断被缓存的查询结果是否过期 ...
- CH5402 选课【树形DP】【背包】
5402 选课 0x50「动态规划」例题 描述 学校实行学分制.每门的必修课都有固定的学分,同时还必须获得相应的选修课程学分.学校开设了 N(N≤300) 门的选修课程,每个学生可选课程的数量 M 是 ...