问题描述:

试题编号: 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

题目大意:

解题思路:

附录:

(审题过程)

读题后10min之内一度以为是不是题目不严谨,n位是不是都是一样的,比如1个0,2个1,2个2,1个3组成多少种有趣数?再一想不对,应该是用递归的角度来思考,n位的话,遍历第一位是什么,第二位什么......即可以混合。

递归所求(题目答案)为全集,而无数种相同n位有趣数为字集

(写代码过程)

第一次运行

 1 //dfs(x){for(0 n)for(0 4)}
2 //
3 //dfs(x, n)
4 //
5 //fx(x)for(0 n)for(0 4)
6 //纸
7 //养成好习惯,先想再码
8 #include<cstdio>
9 int n;
10 void dfs(bool canbe_1, bool canbe_3, int No);//No表示该在哪个位置填入数字,从0开始
11 char number[1050];
12 char box[4] = {0, 1, 2, 3};//填入什么数字从这四个中选
13 int answer;
14 int main()
15 {
16 scanf("%d", &n);
17 dfs(0, 0, 0);
18 // printf("%d%1000000007", answer);
19 printf("%d", answer);
20 }
21 void dfs(bool canbe___1, bool canbe___3, int No)
22 {
23 if(No == n + 1){
24 answer ++;
25 return;
26 }
27 for(int i = 0; i < 4; i ++)
28 {
29 // if()//这里是先判断No还是先判断i
30 if(i == 0){
31 if(No == 0)
32 continue;
33 else{
34 number[No] = box[i];
35 canbe___1 = 1;
36 dfs(canbe___1, canbe___3, No ++);
37 }
38 }
39 else if(i == 1){
40 if(!canbe___1)
41 continue;
42 else{
43 number[No] = box[i];
44 dfs(canbe___1, canbe___3, No ++);
45 }
46 }
47 else if(i == 2){
48 number[No] = box[i];
49 canbe___3 = 1;
50 dfs(canbe___1, canbe___3, No ++);
51 }
52 else if(i == 3){
53 if(!canbe___3)
54 continue;
55 else{
56 number[No] = box[i];
57 dfs(canbe___1, canbe___3, No ++);
58 }
59 }
60 }
61 }
62
63 //No. !=0
64 //0 1
65 //2 3
66 //
67 //2013
68 //2031
69 //2301
70 //
71 //0 0123
72 //1 0123
73 //2 0123
74 //3 0123

第二次运行

 1 #include<cstdio>
2 int n;
3 void dfs(bool canbe_1, bool canbe_3, int No);//No表示该在哪个位置填入数字,从0开始
4 char number[1050];
5 char box[4] = {0, 1, 2, 3};//填入什么数字从这四个中选
6 int answer;
7 int main()
8 {
9 scanf("%d", &n);
10 dfs(0, 0, 0);
11 printf("%d", answer);
12 }
13 void dfs(bool canbe___1, bool canbe___3, int No)
14 {
15 if(No == n){
16 answer ++;
17 return;
18 }
19 for(int i = 0; i < 4; i ++){
20 // if()//这里是先判断No还是先判断i
21 if(i == 0){
22 if(No == 0)
23 continue;
24 else{
25 number[No] = box[i];
26 canbe___1 = 1;
27 dfs(canbe___1, canbe___3, No ++);
28 }
29 }
30 else if(i == 1){
31 if(!canbe___1)
32 continue;
33 else{
34 number[No] = box[i];
35 dfs(canbe___1, canbe___3, No ++);
36 }
37 }
38 else if(i == 2){
39 printf("##");
40 number[No] = box[i];
41 canbe___3 = 1;
42 dfs(canbe___1, canbe___3, No ++);
43 }
44 else if(i == 3){
45 if(!canbe___3)
46 continue;
47 else{
48 number[No] = box[i];
49 dfs(canbe___1, canbe___3, No ++);
50 }
51 }
52 }
53 }
54
55 //0 1
56 //2 3
57
58 //2013
59 //2031
60 //2301
61
62 dfs 011
63 2
64 20
65 dfs 112
66 200
67
68 //这四个数字都出现过至少一次
69 20133//先0123再重复
70 20013//直接前四位中就有重复
71
72 //卡住了。“这四个数字都出现过至少一次”,不知道怎么写。
73
74 2 _ _ _ _ _
75 3
76 //排列组合?

数位DP,

我以为0出现过就可以出现1呢。即010可以,其实错误。

(扩展)

没太搞明白,时间,内存限制,打acm装逼时只知道1s是10^7左右 当代计算机1s计算达百万次

 

CCF 有趣的数的更多相关文章

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

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

  2. CCF CSP 201312-4 有趣的数

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

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

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

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

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

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

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

  6. CCF 201312-4 有趣的数[dp][难]

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

  7. CCF模拟题 有趣的数

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

  8. nyoj 85 有趣的数

    点击打开链接 有趣的数 时间限制:3000 ms  |  内存限制:65535 KB 难度: 描述 把分数按下面的办法排成一个数表. 1/1 1/2 1/3 1/4..... 2/1 2/2 2/3. ...

  9. P2022 有趣的数

    P2022 有趣的数 题目描述 让我们来考虑1到N的正整数集合.让我们把集合中的元素按照字典序排列,例如当N=11时,其顺序应该为:1,10,11,2,3,4,5,6,7,8,9. 定义K在N个数中的 ...

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

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

随机推荐

  1. mp4封装格式与MPEG4Extractor

    首先来看mp4的封装格式,mp4数据都被放在一个个的箱子当中,也就是box,box的字节序为网络字节序,也就是大端存储,box由header和body组成,header指明box的大小和类型,body ...

  2. 最好的在线PDF转换工具服务

    工作中有时候会碰到需要转换PDF文件的情况,现在网上就要很多免费的在线工具,可以进行PDF文件的转换,下面就来介绍一些可以直接在浏览器中将文档.电子表格.和图片转换为PDF或者互相转换的服务工具. ​ ...

  3. Linux权限与组

    rwx r-xr r-x root root r:读 (read) 4 w:写(write) 2 x:执行(execute) ``1 - 没有权限 0 权限 的前三位 rwx 属主权限位(用户权限) ...

  4. Centos7无法ping通内网、外网

    主要检查网络的配置是否正确,我测试时使用的是VMware虚拟机,需要保证centos中的网络配置和VMware中的一致. (1)VMware的配置 网络适配器选择NAT模式 查看NAT设置,这里需要记 ...

  5. JDBC的简单使用以及介绍

    JDBC(Java DataBase Connectivity) Java 语言连接数据库 再本模块中,java提供里一组用于连接数据库的类和接口 Java 语言开发者,本身没有提供如何具体连接数据库 ...

  6. 为什么说 Mybatis 是半自动 ORM 映射工具?它与全自动的区别在哪里?

    Hibernate 属于全自动 ORM 映射工具,使用 Hibernate 查询关联对象或者关联集合对象时,可以根据对象关系模型直接获取,所以它是全自动的.而 Mybatis 在查询关联对象或关联集合 ...

  7. AgileConfig-1.9.4 发布,支持 OpenTelemetry

    Hello 大家好,最新版的 AgileConfig 1.9.4 发布了.现在它可以通过 OpenTelemetry 对外提供 logs,traces,metrics 三个维度的数据.用户可以自由选择 ...

  8. Python连接Etcd集群基础教程

    1.背景介绍 最近接手了一个项目,项目是使用Python开发的,其中使用到了Etcd,但是项目之前开发的方式,只能够支持单节点连接Etcd,不能够在Etcd节点发生故障时,自动转移.因此需要基于现有e ...

  9. spring与设计模式之三代理模式

    部分内容引用: https://blog.csdn.net/shulianghan/article/details/119798155 一.定义 1.1定义 对于现实生活中的代理,大家非常好理解.我们 ...

  10. spring与设计模式之一工厂模式

    大家都说要多阅读spring的代码,这非常在理,毕竟spring的代码是许许多多杰出工程师的结晶,是业界多年的累积. 最近也不是非常忙,所以准备记录一系列的相关代码. 工厂模式是所有人都会的模式,是最 ...