问题描述

试题编号: 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

  1. #include <iostream>
  2.  
  3. using namespace std;
  4.  
  5. int main(){
  6. long long mod = ;
  7. long long n;
  8. cin>>n;
  9. // long long **states = new long long*[n+1];//申请n个二维指针
  10. // for(long long i =0;i<n+1;i++)
  11. // states[i]=new long long[6];//每一个数组中的元素都指向一个数组。
  12. long long states[][];
  13. for(long long i =;i<;i++)
  14. states[][i]=;//在长度为0时,每个状态的个数都是0.
  15. /**6种状态
  16. * 0--剩013
  17. * 1--剩13
  18. * 2--剩01
  19. * 3--剩3
  20. * 4--剩1 出现什么数能满足当前的状态,维持当前的状态。
  21. * 5--无 其实0 1 2 3 4这5种状态都是不满足题意的都是为了
  22. 计算出第5种状态长度为n的时候的长度。
  23. **/
  24. for(long long i=;i<=n;i++)
  25. {
  26. long long j = i-;
  27. states[i][] = ;//只放2那么肯定只有一种,也就是i个2.
  28. states[i][] = (states[j][] + states[j][] * ) % mod;
  29. //状态1可由状态0,在i位放0得到;可由自身状态1,在i位放1或3得到
  30.  
  31. states[i][] = (states[j][] + states[j][]) % mod;
  32. //状态2可由状态0放3得到;可由自身状态放0或1得到
  33.  
  34. states[i][] = (states[j][] + states[j][] * ) % mod;
  35. //状态3可由状态1,在i位放1得到,也可由自身,放2或者放1.
  36.  
  37. states[i][] = (states[j][] + states[j][] + states[j][] * ) % mod;
  38. //状态4可由状态2,在i位放0得到;可由状态1放3得到,也可由自己放3或者0得到。
  39.  
  40. states[i][] = (states[j][] + states[j][] + states[j][] * ) % mod;
  41. //状态5可由状态3,在i位放3得到;可由状态4在i位放1得到;可由状态5在i位放1,3得到。
  42.  
  43. }
  44. cout<<states[n][];
  45. return ;
  46. }

//真的是挺难理解的。使用dp的思想。

1.其中states矩阵的申请,这个代码是用的动态申请了一个二维数组,实际上直接申请静态的就可以。但是也学习了如何申请动态二维数组,还挺复杂的。

2.申请动态二维数组:先申请一个指向指针的指针,指向一个n维指针数组的指针;并且for循环为每一个指针数组中的元素申请数组,指向其。

3.题目中有6种状态,需要好好理解

4.states数组用的很厉害,每一状态是怎么转化来的?或者是怎么维持的?以此来得到递推公式!

5.还有int提交时会有数据长度的限制, 职能的30,所以数组要申请为long long类型的!

//学习了!

CCF 201312-4 有趣的数[dp][难]的更多相关文章

  1. CCF CSP 201312-4 有趣的数

    CCF计算机职业资格认证考试题解系列文章为meelo原创,请务必以链接形式注明本文地址 CCF CSP 201312-4 有趣的数 问题描述 我们把一个数称为有趣的,当且仅当: 1. 它的数字只包含0 ...

  2. CCF系列之有趣的数(201312-4)

    题目链接: http://115.28.138.223:81/view.page?opid=4 试题名称: 有趣的数 时间限制: 1.0s 内存限制: 256.0MB 问题描述: 问题描述 我们把一个 ...

  3. CCF模拟题 有趣的数

    有趣的数 时间限制: 1.0s 内存限制: 256.0MB   问题描述 我们把一个数称为有趣的,当且仅当: 1. 它的数字只包含0, 1, 2, 3,且这四个数字都出现过至少一次. 2. 所有的0都 ...

  4. [算法]美团春招笔试题C-求有趣子序列数(DP)

    题目 输入n,以及长度为n的数组元素 输出数组的非空子序列中有多少个"有趣序列"mod 998244353,有趣序列指所有元素满足arr[i]%i == 0, i从0记. 例: 输 ...

  5. CCF 201312-4 有趣的数 (数位DP, 状压DP, 组合数学+暴力枚举, 推公式, 矩阵快速幂)

    问题描述 我们把一个数称为有趣的,当且仅当: 1. 它的数字只包含0, 1, 2, 3,且这四个数字都出现过至少一次. 2. 所有的0都出现在所有的1之前,而所有的2都出现在所有的3之前. 3. 最高 ...

  6. CCF软考---《有趣的数》

    脑子一热报了CCF的软测..但是又觉得好像并没有什么卵用,就当为蓝桥杯预热然后顺便去软件学院玩一玩吧,遇到一个有意思的题: time limits : 1s 问题描述 我们把一个数称为有趣的,当且仅当 ...

  7. CSP201312-4 有趣的数【dp】

    问题描述 试题编号: 201312-4 试题名称: 有趣的数 时间限制: 1.0s 内存限制: 256.0MB 问题描述: 问题描述 我们把一个数称为有趣的,当且仅当: 1. 它的数字只包含0, 1, ...

  8. ccf 201312-04 有趣的数(组合数学)

    问题描述 我们把一个数称为有趣的,当且仅当: 1. 它的数字只包含0, 1, 2, 3,且这四个数字都出现过至少一次. 2. 所有的0都出现在所有的1之前,而所有的2都出现在所有的3之前. 3. 最高 ...

  9. 有趣的数(number)

    有趣的数(number) 题目描述 这些天 nodgd 在研究一类有趣的数.定义函数 f(n) f(n) f(n) 表示 n n n 在十进制表示下的数字之和.如果一个正整数 n n n 满足 f(n ...

随机推荐

  1. jsp中9个内置对象与servlet对应关系及四个作用域

    参考:  <jsp&servlet学习笔记.第2版.林信良><JSR-245 JavaServer Pages 2.2 Maintenance Release Specifi ...

  2. 【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)( ...

  3. jhipster(springboot+datatable+jpa)后台分页,总结

    最近用datatable做了一个后台分页,但是后台实体原本没写DTO.就碰到的问题做了一下总结 一.datatable使用get方式传数据到后台,这是正常的后台分页,不涉及过滤查询和前端传递的排序字段 ...

  4. windows CMD命令大全及详细解释和语法

    http://blog.csdn.net/god_7z1/article/details/51173067

  5. (转)python中的参数:*args和**kwargs

    def foo(*args, **kwargs):print 'args = ', argsprint 'kwargs = ', kwargsprint '---------------------- ...

  6. gulp报错160

    gulp报错: 这种提示,说明端口被占用,并且要改端口号,首先,我需要把Apache服务器关掉, 然后在gulpfile.js里: 把8080的端口号加进去.就解决了

  7. phpredis 中文手册和redis 教程

    phpredis 中文手册  :   http://www.cnblogs.com/zcy_soft/archive/2012/09/21/2697006.html 手册: http://www.cn ...

  8. 页面操作表单不会调用表单 value 属性的 set 函数

    在 ES5 通过 Object.defineProperty 数据绑定可以监听数据的变化,实现类似的效果,demo 执行如图: 但是这样把 表单元素的 value 属性设置为 访问器属性 后,有个问题 ...

  9. Hibernate的时间戳缓存区域

    时间戳:一个详细到秒的时间点,就是一个时分秒的字符串 时间戳缓存区域存放了对于查询结果相关的表进行插入, 更新或删除操作的时间戳. Hibernate 通过时间戳缓存区域来判断被缓存的查询结果是否过期 ...

  10. CH5402 选课【树形DP】【背包】

    5402 选课 0x50「动态规划」例题 描述 学校实行学分制.每门的必修课都有固定的学分,同时还必须获得相应的选修课程学分.学校开设了 N(N≤300) 门的选修课程,每个学生可选课程的数量 M 是 ...