CCF_有趣的数

题目链接:

  http://115.28.138.223:81/view.page?opid=4

思路:

  dp题,dp[i][j]代表i位数,j状态的数量。

  其中,j 的状态表示值有6种。

0  

1

2        √  j = 0

3

01

02      √  j = 1

03

12

13

23      √  j = 2

012    √  j = 3

013

023    √  j = 4

123

0123    √  j = 5

  其中,i位数各状态的数量由i-1位数各状态的数量推出。

#include<cstdio>
#include<iostream>
using namespace std;

#define MOD 1000000007
long long dp[1005][6];

//2     0   1
//02    1   3
//23    2   2
//012    3   1
//023    4   2
//0123    5   0
int main()
{
    dp[3][0] = 1;
    dp[3][1] = 3;
    dp[3][2] = 2;
    dp[3][3] = 1;
    dp[3][4] = 2;
    dp[3][5] = 0;
    int n;
    cin >> n;
    for(int i = 4;i <= n;i++)
    {
        dp[i][0] = 1;
        dp[i][1] = (dp[i-1][0]+dp[i-1][1]*2)%MOD;
        dp[i][2] = (dp[i-1][0]+dp[i-1][2])%MOD;
        dp[i][3] = (dp[i-1][1]+dp[i-1][3]*2)%MOD;
        dp[i][4] = (dp[i-1][1]+dp[i-1][2]+dp[i-1][4]*2)%MOD;
        dp[i][5] = (dp[i-1][3]+dp[i-1][4]+dp[i-1][5]*2)%MOD;
    }
    cout << dp[n][5] << endl;
    return 0;
}
时间: 2024-11-08 04:42:54

CCF_有趣的数的相关文章

有趣的数

有趣的数 问题描述 我们把一个数称为有趣的,当且仅当: 1. 它的数字只包含0, 1, 2, 3,且这四个数字都出现过至少一次. 2. 所有的0都出现在所有的1之前,而所有的2都出现在所有的3之前. 3. 最高位数字不为0. 因此,符合我们定义的最小的有趣的数是2013.除此以外,4位的有趣的数还有两个:2031和2301. 请计算恰好有n位的有趣的数的个数.由于答案可能非常大,只需要输出答案除以1000000007的余数. 输入格式 输入只有一行,包括恰好一个正整数n (4 ≤ n ≤ 100

CCF 有趣的数

题意:给你4个数0,1,2,3,用这四个数字组成n位的数,其中 0必须 在1前面,  2必须在三前面,问你n位数没有前导0的有多少个. 解题思路: 1) 状态压缩DP,dp[i][j] 表示 到了第i位  出来了那几个数,分别的状态为多少. j(1-15),然后求出各自的DP系数就行了. 解题代码: 1 // File Name: 有趣的数.cpp 2 // Author: darkdream 3 // Created Time: 2015年03月30日 星期一 16时46分03秒 4 5 #i

CCF模拟题 有趣的数

有趣的数 时间限制: 1.0s 内存限制: 256.0MB 问题描述 我们把一个数称为有趣的,当且仅当: 1. 它的数字只包含0, 1, 2, 3,且这四个数字都出现过至少一次. 2. 所有的0都出现在所有的1之前,而所有的2都出现在所有的3之前. 3. 最高位数字不为0. 因此,符合我们定义的最小的有趣的数是2013.除此以外,4位的有趣的数还有两个:2031和2301. 请计算恰好有n位的有趣的数的个数.由于答案可能非常大,只需要输出答案除以1000000007的余数. 输入格式 输入只有一

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

题目链接: http://115.28.138.223:81/view.page?opid=4 试题名称: 有趣的数 时间限制: 1.0s 内存限制: 256.0MB 问题描述: 问题描述 我们把一个数称为有趣的,当且仅当: 1. 它的数字只包含0, 1, 2, 3,且这四个数字都出现过至少一次. 2. 所有的0都出现在所有的1之前,而所有的2都出现在所有的3之前. 3. 最高位数字不为0. 因此,符合我们定义的最小的有趣的数是2013.除此以外,4位的有趣的数还有两个:2031和2301. 请

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

问题描述 我们把一个数称为有趣的,当且仅当: 1. 它的数字只包含0, 1, 2, 3,且这四个数字都出现过至少一次. 2. 所有的0都出现在所有的1之前,而所有的2都出现在所有的3之前. 3. 最高位数字不为0. 因此,符合我们定义的最小的有趣的数是2013.除此以外,4位的有趣的数还有两个:2031和2301. 请计算恰好有n位的有趣的数的个数.由于答案可能非常大,只需要输出答案除以1000000007的余数. 输入格式 输入只有一行,包括恰好一个正整数n (4 ≤ n ≤ 1000). 输

有趣的数(动态规划)

问题描述 我们把一个数称为有趣的,当且仅当: 1. 它的数字只包含0, 1, 2, 3,且这四个数字都出现过至少一次. 2. 所有的0都出现在所有的1之前,而所有的2都出现在所有的3之前. 3. 最高位数字不为0. 因此,符合我们定义的最小的有趣的数是2013.除此以外,4位的有趣的数还有两个:2031和2301. 请计算恰好有n位的有趣的数的个数.由于答案可能非常大,只需要输出答案除以1000000007的余数. 输入格式 输入只有一行,包括恰好一个正整数n (4 ≤ n ≤ 1000). 输

P2022 有趣的数

P2022 有趣的数 题目描述 让我们来考虑1到N的正整数集合.让我们把集合中的元素按照字典序排列,例如当N=11时,其顺序应该为:1,10,11,2,3,4,5,6,7,8,9. 定义K在N个数中的位置为Q(N,K),例如Q(11,2)=4.现在给出整数K和M,要求找到最小的N,使得Q(N,K)=M. 输入输出格式 输入格式: 输入文件只有一行,是两个整数K和M. 输出格式: 输出文件只有一行,是最小的N,如果不存在这样的N就输出0. 输入输出样例 输入样例#1: Sample 1: 2 4

CCF模拟题4-有趣的数

问题描述 我们把一个数称为有趣的,当且仅当:1. 它的数字只包含0, 1, 2, 3,且这四个数字都出现过至少一次.2. 所有的0都出现在所有的1之前,而所有的2都出现在所有的3之前.3. 最高位数字不为0.因此,符合我们定义的最小的有趣的数是2013.除此以外,4位的有趣的数还有两个:2031和2301.请计算恰好有n位的有趣的数的个数.由于答案可能非常大,只需要输出答案除以1000000007的余数. 输入格式 输入只有一行,包括恰好一个正整数n (4 ≤ n ≤ 1000).  输出格式

ccf201312-4有趣的数,递推

http://115.28.138.223/view.page?gpid=T2 问题描述 我们把一个数称为有趣的,当且仅当: 1. 它的数字只包含0, 1, 2, 3,且这四个数字都出现过至少一次. 2. 所有的0都出现在所有的1之前,而所有的2都出现在所有的3之前. 3. 最高位数字不为0. 因此,符合我们定义的最小的有趣的数是2013.除此以外,4位的有趣的数还有两个:2031和2301. 请计算恰好有n位的有趣的数的个数.由于答案可能非常大,只需要输出答案除以1000000007的余数.