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 ...
随机推荐
- 使用GitHub建立个人网站
使用GitHub建立个人网站 1 Git简介 2 为什么使用Github Pages 3 创建Github Pages 3.1 安装git工具. 3.2 两种pages模式 3.3 创建步骤 3.4 ...
- 数论 + 容斥 - HDU 1695 GCD
problem's Link mean 给定五个数a,b,c,d,k,从1~a中选一个数x,1~b中选一个数y,使得gcd(x,y)=k. 求满足条件的pair(x,y)数. analyse 由于b, ...
- Android学习笔记36:使用SQLite方式存储数据
在Android中一共提供了5种数据存储方式,分别为: (1)Files:通过FileInputStream和FileOutputStream对文件进行操作.具体使用方法可以参阅博文<Andro ...
- 使用AngularJS实现的前后端分离的数据交互过程
一. AngularJS简介 AngularJS是什么 AngularJS是一个开源Web应用程序框架.最初是由MISKO Hevery和Adam Abrons于2009年开发,现在是由谷歌维护. A ...
- Xcode升级后插件失败解决方法
大家都知道每次升级Xcode 然后插件都不能用了,最根本的原因是每一个插件都有个Info.plist文件,这个文件里有个key-DVTPlugInCompatibilityUUIDs记录了能够使用该插 ...
- Objective-C Runtime初探:self super
题目 上题目,已知A是爷爷,B是爸爸,C是孙子. @interface A : NSObject - (void)f; @end @interface B : A - (void)f; - (void ...
- print多重打印
遇见有趣的问题必须记录下来,当时的想法思路也要记下来 以下两行代码打印出来的结果会是什么 print('2 * 3 = %d' % (2 * 3)) print('2 * 3 = %d' % 2 * ...
- Struts2_day02--Action获取表单提交数据
Action获取表单提交数据 1 之前web阶段,提交表单到servlet里面,在servlet里面使用request对象里面的方法获取,getParameter,getParameterMap 2 ...
- WPF进阶之接口(4):ICommand实现详解
上一章WPF进阶之接口():INotifyPropertyChanged,ICommand中我们遗留了几个问题,我将在本节中做出解释.在详细解释ICommand实现之前,我们现在关注一下什么是:弱引用 ...
- 微软笔试题-highways
题目大意 一条单向的高速公路上有N辆车,在0时刻,每辆车分别在起点A[0],A[1]....处开始从北向南出发,每辆车有个终点B[0],B[1]....且每辆车有个限制速度 V[0],V[1]... ...