问题描述

试题编号: 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][难]的更多相关文章

  1. CCF CSP 201312-4 有趣的数

    CCF计算机职业资格认证考试题解系列文章为meelo原创,请务必以链接形式注明本文地址 CCF CSP 201312-4 有趣的数 问题描述 我们把一个数称为有趣的,当且仅当: 1. 它的数字只包含0 ...

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

    题目链接: http://115.28.138.223:81/view.page?opid=4 试题名称: 有趣的数 时间限制: 1.0s 内存限制: 256.0MB 问题描述: 问题描述 我们把一个 ...

  3. CCF模拟题 有趣的数

    有趣的数 时间限制: 1.0s 内存限制: 256.0MB   问题描述 我们把一个数称为有趣的,当且仅当: 1. 它的数字只包含0, 1, 2, 3,且这四个数字都出现过至少一次. 2. 所有的0都 ...

  4. [算法]美团春招笔试题C-求有趣子序列数(DP)

    题目 输入n,以及长度为n的数组元素 输出数组的非空子序列中有多少个"有趣序列"mod 998244353,有趣序列指所有元素满足arr[i]%i == 0, i从0记. 例: 输 ...

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

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

  6. CCF软考---《有趣的数》

    脑子一热报了CCF的软测..但是又觉得好像并没有什么卵用,就当为蓝桥杯预热然后顺便去软件学院玩一玩吧,遇到一个有意思的题: time limits : 1s 问题描述 我们把一个数称为有趣的,当且仅当 ...

  7. CSP201312-4 有趣的数【dp】

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

  8. ccf 201312-04 有趣的数(组合数学)

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

  9. 有趣的数(number)

    有趣的数(number) 题目描述 这些天 nodgd 在研究一类有趣的数.定义函数 f(n) f(n) f(n) 表示 n n n 在十进制表示下的数字之和.如果一个正整数 n n n 满足 f(n ...

随机推荐

  1. 关于Unity的组件和作用

    一.Transform组件 整个场景由节点树组成. 节点+Transform组件,每个Transform有自己的孩子Transform,由Transform组成Transform树,而每个Transf ...

  2. 十步理解Sql

    很多程序员视 SQL 为洪水猛兽.SQL 是一种为数不多的声明性语言,它的运行方式完全不同于我们所熟知的命令行语言.面向对象的程序语言.甚至是函数语言(尽管有些人认为 SQL 语言也是一种函数式语言) ...

  3. 27Mybatis_一级缓存的实际应用场景

    正式开发,是将mybatis和spring进行整合开发,事务控制在service中. 一个service方法中包括 很多mapper方法调用. service{ //开始执行时,开启事务,创建SqlS ...

  4. Canvas组件:画布,可以实现动画操作

    Canvas组件:画布,可以实现动画操作. TextArea:文本域. 在单行文本域中回车会激发ActionEvent. 用CheckBoxGroup实现单选框功能. Java中,单选框和复选框都是使 ...

  5. selenium 获取按钮的笔记

    测试odoo时,发现大部分按钮都是动态生成,id也是动态的, 只能用xpath,但是配置一旦改变导致按钮位置改变 想到一个办法,遍历所有按钮,然后内容相符的才点击,测试代码如下 submit_loc ...

  6. 微软ASP.NET网站部署指南(8):部署Code-Only更新

    1.  综述 初始化部署以后,你须要继续维护和更新你的网站.本章节将向你展示一个不包含数据库改变的部署升级流程.(下一章节将展示数据库改变的部署升级流程.) 提醒:假设依据本章节所做的操作出现错误信息 ...

  7. querySelectorAll 和getElementsByClassName的区别

    querySelectorAll 返回的是映射 改变其值不会改变document 而getElementsByClassName 改变它就会改变document 摘自JavaScript权威指南(jQ ...

  8. loadruner11 socket脚本-10053错误

    背景: socket 10053异常:软件主动放弃一个连接,原因是超时或协议错误.如果LR客户端报10053异常,说明LR在执行套接字操作时,发生通信超时.网络中断或其它异常,主动将Socket连接断 ...

  9. python虚拟环境的使用---virtualenv and virtualenvwrapper

    虚拟环境 virtualenv 常用操作 step1: 安装 : pip install virtualenv step2:新建 : virtualenv venv cd venv activate ...

  10. Spring_day02--log4j介绍_Spring整合web项目演示

    log4j介绍 1 通过log4j可以看到程序运行过程中更详细的信息 (1)经常使用log4j查看日志 2 使用 (1)导入log4j的jar包 (2)复制log4j的配置文件,复制到src下面 3 ...