有趣的数(动态规划)

问题描述

我们把一个数称为有趣的,当且仅当:

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

动态规划解法:

import java.util.*;
public class Main {
      public static void main(String[] args) {
      new Main().run();
}
public void run() {
      Scanner fin = new Scanner(System.in);
      int N = fin.nextInt();
      long[] count = new long[8];
      count[6] = 0;
      count[7] = 1;
      long mod = 1000000007;
      for (int i = 2; i <= N; ++i) {
          long[] newCount = new long[8];
          newCount[0] = (count[0] * 2 + count[1] + count[3]) % mod;
          newCount[1] = (count[1] * 2 + count[2] + count[5]) % mod;
          newCount[2] = (count[2] + count[6]) % mod;
          newCount[3] = (count[3] * 2 + count[4] + count[5]) % mod;
          newCount[4] = (count[4] + count[7]) % mod;
          newCount[5] = (count[5] * 2 + count[6] + count[7]) % mod;
          newCount[6] = 0;
          newCount[7] = 1;
          count = newCount;
      }
     System.out.println(count[0]);
   }
}
时间: 2024-10-12 08:35:57

有趣的数(动态规划)的相关文章

有趣的数

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

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模拟题4-有趣的数

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

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 有趣的数 (数位DP, 状压DP, 组合数学+暴力枚举, 推公式, 矩阵快速幂)

问题描述 我们把一个数称为有趣的,当且仅当: 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

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的余数.

普转提——有趣的数,欢乐ABC,打游戏

有趣的数——构造符合条件的数 给你一个区间,问有多少个数符合每一位中,只有一个数字和其他数字不同,也就是其他数字都相同,有且只有一个异类: 数据范围是1e16: 因为只考虑数量而不用管大小: 只要0到9枚举出来就好了: #include<cstdio> #include<map> #include<cstring> #include<algorithm> using namespace std; typedef long long ll; map<ll