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 ...
随机推荐
- APP纯黑盒测试—某些可以试试的操作
一.多次快速点击一处功能入口: 该测试方法可以在某些应用中打开俩次目标界面,举一些具体一点的例子: 1.比如现在很多APP需要登陆,如果打开了俩次登录页面,就容易造成登录成功后应用跳转界面又是登录界面 ...
- 【转】伪O2O已死?2016年实体零售将迎来真正的O2O
O2O果真如所谓的经济学家许小年所说“是两边都是零,中间一个2货”吗?我觉得,经济学家不是说相声的,这种哗众取宠的观点不应该出自一个严谨的经济学家之口.而且,我也不认为许小年真正懂什么叫O2O. 但O ...
- android jni log
在编写的jni时,经常需要输出打印信息进行调试,而C中printf在jni中没有效果,这时就需要使用NDK提供的函数. 1. jni中包含头文件 #include <android/log.h& ...
- 怎么用MathType解决Word公式排版很乱的问题
现在办公室起草文件,期刊论文投稿.学校试着编辑都要先在Word中编辑好后再打印出来.在Word中编辑这些文本内容时,如果遇到公式就要使用专门的MathType公式编辑器.而有很多人在用MathType ...
- 【深入Java虚拟机】之二:Class类文件结构
平台无关性 Java是与平台无关的语言,这得益于Java源代码编译后生成的存储字节码的文件,即Class文件,以及Java虚拟机的实现.不仅使用Java编译器可以把Java代码编译成存储字节码的Cla ...
- 获取jqGrid中选择的行的数据以及 jqGrid获得所有行数据的方法
获取jqGrid中选择的行的数据: 获取选择一行的id,如果你选择多行,那下面的id是最后选择的行的id: 1 var id=$('#gridTable').jqGrid('getGridPara ...
- Mysql 知识点总结
1.创建数据库 mysqladmin 下面是一个简单的例子,创建名为 yiibai_tutorials1 的数据库. D:\software\mysql--winx64\bin> mysq ...
- 为什么Objective-C很难
转自:http://mobile.51cto.com/hot-322261.htm 2012-03-07 13:43 junwong 开源中国社区 字号:T | T 作为一个Objective-C ...
- Arduino开发版学习计划--直流电机
代码来源:http://www.cnblogs.com/starsnow/p/4579547.html // --------------------------------------------- ...
- javascript 禁止页面选取-兼容IE、Chrome和firefox浏览器
在做到一个页面需要禁止网页内容被选取的时候,碰到浏览器兼容的问题,解决方法如下 1.单独使用适用于IE.Chrome浏览器,主要是在head的<script>标签里面加上如下代码 docu ...