题目链接


典型的数位DP~
打表易发现所有符合条件的数都是以 2 2 2 开头的,那么一共有以下几种状态:

  1. 只包含数字 2
  2. 只包含数字 2,0
  3. 只包含数字 2,3
  4. 只包含数字 2,0,3
  5. 只包含数字 2,0,1
  6. 包含四个数字

回答几个困惑,如果开头为 2,其他数字任选,那为什么不是 2 3 = 8 2^3=8 23=8 个状态呢?举例,为什么没有只包含 2,1的状态,因为 1 的位置必须出现在 0 后面,如果单纯只有 2,1 显然无法知道答案,所以出现 1 就必须出现 0,所以只有 6 个状态。我们用 d p [ i ] [ j ] dp[i][j] dp[i][j] 表示长为 i i i 位的数在 j j j 状态下有多少个,状态转移方程推导如下:

  • d p [ i ] [ 0 ] ≡ 1 dp[i][0]\equiv 1 dp[i][0]≡1
  • 包含 2,0 两个数字可以通过以下两种方法得到:
    ①前 i − 1 i-1 i−1 位都是 2 加上一个 0
    ②前 i − 1 i-1 i−1 位已经包含 0 和 2了,第 i i i 位加 0 或者加 2 都行
    即: d p [ i ] [ 1 ] = d p [ i − 1 ] [ 0 ] + d p [ i − 1 ] [ 1 ] ∗ 2 dp[i][1]=dp[i-1][0]+dp[i-1][1]*2 dp[i][1]=dp[i−1][0]+dp[i−1][1]∗2
  • 包含 2,3 两个数字可以通过以下两种方法得到:
    ①前 i − 1 i-1 i−1 位都是 2 加上一个 3
    ②前 i − 1 i-1 i−1 位已经包含 2 或 3了,第 i i i 位加 3(注意 2 必须在 3 前面,所以此时不能加 2)
    即: d p [ i ] [ 2 ] = d p [ i − 1 ] [ 0 ] + d p [ i − 1 ] [ 2 ] dp[i][2]=dp[i-1][0]+dp[i-1][2] dp[i][2]=dp[i−1][0]+dp[i−1][2]
  • 包含 2,0,3 三个数字可以通过以下三种方法得到:
    ①前 i − 1 i-1 i−1 位包含 2,0 了,第 i i i 位加 3 得到
    ②前 i − 1 i-1 i−1 位包含 2,3 了,第 i i i 位加 0 得到
    ③前 i − 1 i-1 i−1 位包含 2,0,3了,第 i i i 位加 0 或者 3 得到
  • 包含 2,0,1 三个数字可以通过以下两种方法得到:
    ①前 i − 1 i-1 i−1 位包含 2,0 了,第 i i i 位加 1 得到
    ②前 i − 1 i-1 i−1 位包含 2,0,1 了,第 i i i 位加 1 或者 2 得到
  • 包含四个数字可以通过以下两种方法得到:
    ①前 i − 1 i-1 i−1 位包含 2,0,3 了,第 i i i 位加 1
    ②前 i − 1 i-1 i−1 位包含 2,0,1 了,第 i i i 位加 3
    ③前 i − 1 i-1 i−1 位包含 2,0,1,3了,第 i i i 位加 1 或者加 3

最后 d p [ n ] [ 5 ] dp[n][5] dp[n][5] 就是答案,AC代码如下:

#include <bits/stdc++.h>using namespace std;
typedef long long ll;
const ll mod = 1e9 + 7;
ll n, dp[1005][10];int main() {cin >> n;for (int i = 1; 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][2] + dp[i - 1][3] * 2) % mod;dp[i][4] = (dp[i - 1][1] + 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;
}

CSP 201312-4 有趣的数相关推荐

  1. CSP认证 201312-4有趣的数[C++题解]:组合数、数学

    文章目录 题目解答 题目链接 题目解答 来源:acwing 分析: 题目要求:n位数,只能放0,1,2,3:0必须在1前面,2必须在3前面:0不能放在首位. 由于0和1有限制关系,2和3有限制关系,所 ...

  2. #CSP 201312-4 有趣的数

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

  3. AcWing 3195. 有趣的数

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

  4. 【CCFCSP- 201312-4】有趣的数(线性dp)

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

  5. CCF 201312-4 有趣的数

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

  6. 动态规划——有趣的数(ccf)

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

  7. CCF CSP201312-4有趣的数

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

  8. CCF201312-4 有趣的数(100分)

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

  9. 【CSP201312-4】有趣的数(数位DP)

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

  10. CCF 模拟题 有趣的数 (数位DP)

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

最新文章

  1. [19/03/16-星期六] 常用类_Date时间类DateFormat类
  2. 计算机设备投标标书范本,OA办公自动化系统投标文件(标书范本)
  3. 安卓bmi项目_搭载安卓系统的智能健康一体机:上禾SH-V20
  4. MySQL Group Replication数据安全性保障
  5. 关于Java html table表格转excel
  6. ubuntu etc文件夹在哪_嵌入式Linux开发学习之 Ubuntu 和 Windows 文件互传
  7. 手机号码归属地全库生成
  8. matlab美国标准大气,国际标准大气(ISA)
  9. java 生成条形码_JAVA 生成扫描条形码
  10. Blender自动化建模入门
  11. 三维激光扫描后处理软件_地面三维激光扫描仪应用之一|云尚智造
  12. EasyExcel 固定(冻结)单元格
  13. Oracle 对比两张表的数据是否一致
  14. 如何解决Css属性text-overflow:ellipsis 不起作用(文本溢出显示省略号)
  15. 微信支付横空出世,闲扯一番自我扫盲(转)
  16. MySQL为什么会抖一下
  17. spi转串口 linux驱动,RT_Thread WK2124 SPI转串口芯片驱动软件包
  18. win10本地组策略功能说明
  19. 北交大计算机学院教授,北京交通大学计算机与信息技术学院导师教师师资介绍简介-张树君...
  20. 华为MateBook暗影精灵游戏本恢复出厂设置

热门文章

  1. 培训咨询翻译网站方案
  2. html绝对定位怎么页面居中,css绝对定位如何居中?css绝对定位居中的四种实现方法...
  3. 上海计算机信息进修学院高中部好不好,【图】- 初三成绩不好,想读高中来上海长宁科技学院高中部 - 上海浦东新区学历教育 - 上海百姓网...
  4. Spark部分算子及使用
  5. 通达信lv2接口程序怎么创建BOLL通道数据?
  6. 为了心中的春天而坚持
  7. 慧安-PLC4X支持的协议
  8. 计算机语言的正交性,【zt】程序设计语言正交特性的一点思考
  9. 高等数学的函数连续,可导,可微和偏导数连续的关系(多元)
  10. 如何设置excel表格表头冻结_excel表格怎样让表头固定不动,看完就明白了