CCF CSP 有趣的数 动态规划

【CSP考题扩展】动态规划入门(1) 动态规划(Dynamic Programming,简称DP)是一种在数学、管理科学、计算机科学、经济学和生物信息学等领域中使用的,用来解决特定类型问题的算法思想。其核心思想在于解决复杂问题的过程中,把问题分解为相对简单的子问题,通过解决这些子问题来解决整个问题。 阅读详情

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

________________________________________________________________________

这题插入0、1、2、3的规则我们可以看做是几个状态的相互转化,可以构成一个状态机。首先根据规则我们可以知道第一位数一定是2,我们把只插入2的情况表示为状态0,之后5种不同的状态由这一点发起。共6种状态由如下描述。

  1. 状态0表示出现了2,还未出现0和3,只出现了2,可使用0、2、3。 
  2. 状态1表示出现了0、2,可使用0、1、2 。
  3. 状态2表示出现了0、1、2且未出现3,可使用1、2、3 。
  4. 状态3表示出现了2、3且未出现0,可使用0、3。
  5. 状态4表示出现了0、2、3,未出现1,可使用0、1、3。 
  6. 状态5表示出现了0、1、2、3,可使用1、3 。
这6种状态可以构成如下的状态转换图:


可惜的是,我都已经画出状态转换关系图了,居然还用深度搜索去做,时间果断爆炸才20分,傻到家。有了转换关系我应该立刻想到用动态规划来做。从图中来可以看出,例如恰好n位数的状态5可以由n-1位的状态2添加一个3,状态4添加一个1,状态5添加一个1或者3转换而来,也就是说,n为状态5的数量是n-1位的  状态2+状态4+状态5*2 。有了状态转移方程,问题都迎刃而解。

先贴出我开始犯傻时用的深搜代码,20分,纪念一下。

#include<iostream>
using namespace std;
int n;
int num;
int set[5];//false表示没有使用过i 
void DFS(int a,int t,int flag)
{
	bool set_flag = false;
	if(set[a]==0)//在此之前还位使用过a 
	{
		set_flag = true;  //表示当前是第一次设置了a 
		set[a] = 1;
		set[4]++;         //记录当前使用了几个数 
	}
	if((4-set[4])>n-t)//未使用的数的数量小于剩下可加入的数量 
	{
		if(set_flag)
	    {
	    	set[a]=0;
	    	set[4]--; 
     	}
		return ;
	}
	if(flag==0)
	{
		DFS(2,t+1,0);
		DFS(0,t+1,1);
		DFS(3,t+1,3);
	}else if(flag == 1)
	{
		DFS(2,t+1,1);
		DFS(0,t+1,1);
		DFS(1,t+1,2);
		DFS(3,t+1,4);
	}else if(flag == 2)
	{
		DFS(1,t+1,2);
		DFS(2,t+1,2);
		DFS(3,t+1,5);
	}else if(flag == 3)
	{
		DFS(0,t+1,4);
		DFS(3,t+1,3);
	}else if(flag == 4)
	{
		DFS(0,t+1,4);
		DFS(3,t+1,4);
		DFS(1,t+1,5);
	}else{

        //到达状态5后可直接计算当前情况下能产生多少不同的解 
		int temp = n-t,count=1;
		for(int i=0;i<temp;i++)
		{
			count = (count*2)%1000000007;
		}
		num = (num + count)%1000000007;
		if(set_flag)
	    {
		    set[a]=0;
		    set[4]--; 
	    }
		return ; 
	}
}

int main()
{
	cin >> n;
	DFS(2,1,0);
	cout << num;
	return 0;
} 
下面是用动态规划做的,代码没几行,100分。

#include<iostream>
using namespace std;
#define MAXX 1010
#define MOD 1000000007
int n;
int num;
long long dp[MAXX][6];

int main()
{
	cin >> n;
	dp[1][0]=1;
	dp[1][1]=dp[1][2]=dp[1][3]=dp[1][4]=dp[1][5]=0;
	for(int i=2;i<=n;i++)
	{
		dp[i][0] = 1;
		dp[i][1] = (dp[i-1][1]*2 + dp[i-1][0]) % MOD;
		dp[i][2] = (dp[i-1][2]*2 + dp[i-1][1]) % MOD;
		dp[i][3] = (dp[i-1][3] + dp[i-1][0]) % MOD;
		dp[i][4] = (dp[i-1][4]*2 + dp[i-1][1] + dp[i-1][3]) % MOD;
		dp[i][5] = (dp[i-1][5]*2 + dp[i-1][2] + dp[i-1][4]) % MOD;
	} 
	
	cout << dp[n][5] << endl;
	return 0;
} 


历年CCF-CSP认证考试题目解法/思想 每年的题难度都不太一样,这一点在16、17年上尤其明显,难度低的时候前两道题就是送分题,加一起15分钟解决,得分样例水的不行。难度高的时候第二题就让你模拟半天,且测试样例诡异无比,测试样例通过可能只=20分,就别说后面3,4题了。 总结一些技术点、难点: 字符串处理上:lcs(最长公共子序列),kmp(字符串匹配算法),复杂题设计思维+注释,类的设置,数据封装,多重嵌套解法 阅读详情

相关推荐

CCF-CSP认证知识要求

CCF-CSP认证知识要求 认证内容主要覆盖大学计算机专业所学习的程序设计、数据结构以及算法,以及相关的数学基础知识,并关注编程技巧的使用、性能的优化,以及奇异情况的正常处理。包括但不限于:    1.程序设计基础     逻辑与数学运算,分支循环,过程调用(递归),字符串操作,文件操作等。    2.数据结构    线性表(数组、队列、栈、链表)、树(堆、排序二叉树)、哈希表、集合

SpadgerZ的博客 2万+

【CSP考点总结】(1)

定义。

fzy2003的博客 1354

【CCF相关】CCF考试的形式以及难度

1. 考试形式 CCF 考试的形式是 5 题,每题多个测试点,一共 100 分,5 题 500 分。有关更多介绍可以看官网上的解答 这里。 据说现在 CCF 赛制改革了,考试的时候提交后可以及时看到分数反馈。 2. 试题难度 要根据数据范围选择正确的算法。可以看这里。 根据我自己的经验,前两题主要是简单的模拟题,最多用到一些 STL 以及排序算法等,难度不大。基本上可以接受 O(n2)O(n^2)O(n2) 的复杂度。 第三题,难度不定。可能要考虑算法。 第四第五题,大概率一定要使用某种算法,第四题经常出

infbeat的博客 1万+

CSP-动态规划-最长公共子序列(LCS)

动态规划(Dynamic Programming,简称DP)主要用于求解可以被的复杂问题,特别是在优化问题上表现出色,如最短路径、最大子数组和、编辑距离等。(通常是在一个数组或者哈希表中),以避免重复计算,从而提高效率。

fzy2003的博客 1652

历届NOIp动态规划梳理 (54页)--PASCAL 好.pdf

历届NOIp动态规划梳理 (54页)--PASCAL 好.pdf

别再被systemd-resolved坑了!银河麒麟V10下用Bind9搭建内网DNS的完整避坑指南

本文详细介绍了在银河麒麟V10和Ubuntu系统下部署Bind9 DNS服务器时,如何解决与systemd-resolved的端口冲突问题。提供了五种专业级解决方案,包括彻底禁用systemd-resolved、智能端口转发等,并特别针对银河麒麟V10的安全加固需求给出了配置建议和诊断工具,帮助用户高效搭建内网DNS服务。

weixin_30342209的博客 654

【如何掌握CSP-J 信奥赛中的动态规划算法】

【如何掌握CSP-J 信奥赛中的广搜算法】

王老师青少年编程 1525

你需要这样一个Ros软路由—— 路由器+外网+一号通ip线路=动态ip的WiFi信号

功能强大 管理便捷—给您全新的路由体验 一键更换指定线路or批量更换所有IP/MAC/SSID 自定义走本地网络策略的分流功能 设备批发价、不限制拨号账号服务商 强大的单设备/多设备IP去重功能 批量导入、管理一号通线路 一键任意切换5G_WiFi(推荐)/2.4G_WiFi(建议不用) 设备支持PPTP/L2TP/SSTP/openVP.N等协议 独家支持openVPN,适用于网络受限用户 支持自行接入AP和交换机扩容 一键打开/关闭所有虚拟WiFi 一键隐藏/显示设备WiFi...

米粒儿 4253

CSP-J/S 动态规划模版讲解

可以看到,动规在一轮考的次数不算少,所以二轮占的比重一定很大(基本3,4题里面肯定有一道)。再看看历年真题,大部分题目不想超时就得用特殊的方法,动规就是其中的一种。规定每次只能选相邻的2堆石子合并成新的一堆,并将新的一堆石子数记为该次合并的得分。以下N行,每行一个正整数,小于10000,分别表示第i堆石子的个数(1≤i≤N)。可以看到,在2019~2023年间二分考了4次,枚举考了3次,而动规也考了3次。实际上就是做出一个表格,每一个代表一个状态,所以做这个最需要的就是状态转移方程。

offmy的博客 1051

苏州大学自动化考研842自动控制原理:手把手教你用胡寿松《自控》高效备考(附复试电工/电子/微机原理攻略)

本文详细解析苏州大学自动化考研842自动控制原理备考策略,以胡寿松《自动控制原理》为核心教材,提供三阶段高效学习路径和实战技巧。重点涵盖频域分析、根轨迹绘制等高频考点,并针对机电、光电、轨道三个学院的复试科目(电工电子技术、电子技术基础、微机原理与接口技术)给出差异化备考方案,助力考生全面提升笔试和面试表现。

weixin_42638178的博客 399

微腔光频梳仿真入门:MATLAB求解LLE方程全流程解析

光学频率梳在精密测量、光通信和微波光子学中有着广阔应用,而微环谐振腔中的Kerr非线性与四波混频效应能够紧凑地产生宽带梳齿。仿真这类系统的核心是求解Lugiato-Lefever方程(LLE),但直接从物理参数到数值代码往往让初学者无从下手。本文从微腔光频梳的物理图像出发,介绍LLE方程的推导与归一化方法,并重点讲解MATLAB数值实现的两种思路:基于ode45的频域耦合方程组求解与分裂步长RK4IP方法。同时讨论失谐扫描、孤子态识别、参数稳定性边界,以及如何将真实器件参数换算为无量纲仿真参数。无论你是刚接

weixin_32325225的博客 293

CCF-CSP 201312-4 有趣的数 [c++]

CCF-CSP 201312-4 有趣的数 文章目录CCF-CSP 201312-4 有趣的数问题描述思路代码 问题描述 题目链接 思路 首先整理一下有趣的数的定义: 1.只包含数字0、1、2和3 2.0、1、2和3各自至少出现一次 3.所有的0都出现在1之前 4.所有的2都出现在3之前 5.最高位数字不为0 上述定义可以看出,有趣数以1或3结尾,以2开始。 遇到这类题容易想到动态规划。(取一个大数的余就有暗示动规的意味)。但是想了很久都没有想到解法,原因是没有考虑设置子目标进行多目标动规。现将答案的思路重

xbr_1111的博客 658

【fNIRS可视化学习1】基于NIRS-SPM进行光极可视化并计算通道坐标

设头皮上的目标点为P₀(x₀, y₀, z₀),需要在大脑皮层点集S上找到最合适的投影点P'。

Rose9614的博客 2208

ccf csp 有趣的数 动态规划

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

nainaiwang的专栏 2257

从零构建:基于Docker与FRR的OSPF虚拟网络实验室

本文详细介绍了如何利用Docker与FRR构建OSPF虚拟网络实验室,从环境设计到高级网络拓扑配置,再到实验验证与排错。通过容器化技术实现高效资源利用和快速部署,特别适合网络协议教学、企业网络架构验证等场景。

plum99的博客 221

NVIDIA AI 学习与认证指南:从入门到精通

NVIDIA的AI学习与认证体系,凭借其先进的技术背景、丰富的课程资源以及强大的行业认可度,已成为AI学习者和从业者的宝贵资源。通过深入学习NVIDIA的课程和获得认证,学习者可以快速掌握最前沿的AI技术,提升自己的职业竞争力。从基础课程到专业认证,NVIDIA为不同层次的学习者提供了量身定制的学习资源,帮助他们掌握AI的核心技能,提升职业竞争力。是其中的一个亮点,它结合了信息检索与生成式AI的能力,使AI可以从外部知识库中实时提取信息,生成更具深度和准确性的内容。,帮助学习者快速掌握该领域的核心技术。

高校图书馆高级系统架构师/研究馆员,推动高校AI从概念演示到可评审、可交付、可运维:路线图与立项评审、PoC交付、评测回归与上线运维(Baseline/Eval/Ops)。 1878

ccf csp-201312-4-有趣的数(动态规划)

动态规划思想: 往某一位上填数字时,取决于上一位的正确填写。 一步对,才有可能步步对,而一步错,则步步错。 动态规划过程模拟: ①每填写一位数字,都有可能形成一种状态 Statei。 ②而每一个状态 Statei 都可以由上一个状态 Statei-1 和自己本身状态(数字可以重复)推导而来。 State0:2 State1:2 0 + 0/2 State2:2 3 + 3 St...

波点兔的博客 894

DAF-Net:动态注意力红外-可见光图像融合

DAF-Net 红外-可见光融合链路:IR/VIS 双分支 (Conv+ResBlock → 64ch) → DynamicAttentionFusion (Cat→Sigmoid→加权) → 重建 (Conv→Sigmoid)。TNO 上 SSIM=0.782 (vs IR), 0.734 (vs VIS), 参数量仅 218K。核心贡献:轻量动态注意力门控, 无监督 SSIM+MSE 损失不需要配准 ground truth。

FJN110的博客 319

CCF CSP认证201312-4 有趣的数(排列组合计算||DP动态规划)

201312-4 有趣的数 题目 思路 在这里插入代码片

weixin_43944910的博客 523

SAP B1中文培訓教材_SDK

公司内部培训资料,对开发工具 ,DIAPI, UIAPI,Add-ON有详细解说

STM32F407中文手册

STM32f407中文手册 本参考手册面向应用开发人员,提供有关使用 STM32F405xx/07xx、STM32F415xx/17xx、 STM32F42xxx 和 STM32F43xxx 微控制器存储器与外设的完整信息。STM32F405xx/07xx、STM32F415xx/17xx、STM32F42xxx 和 STM32F43xxx 构成一个微 控制器系列,各产品具有不同的存储器大小、封装和外设。有关订购信息以及器件的机械与电气特性,请参见数据手册。有关 ARM Cortex™-M4F 内核的信息,请参见《Cortex™-M4F 技术参考手册》。

CCF-CSP 2013年12月 题解

201312-1 出现次数最多的数 题目: 问题描述 试题编号: 201312-1 试题名称: 出现次数最多的数 时间限制: 1.0s 内存限制: 256.0MB 问题描述   给定n个正整数,找出它们中出现次数最多的数。如果这样的数有多个,请输出其中最小的一个。 输入格式   输入的第一行只有一个正整数n(1 ≤ n ≤ 1000),表示数字的个数。   输入的第二行有n个整数s1, s2, …, sn (1 ≤ si ≤ 10000, 1 ≤ i ≤ n)。相邻的数用空格分隔。 输出格式   输出这n个

weixin_46065450的博客 902

efm32 入门.pdf

本PDF共计22页,介绍的是操作驱动API,下载与否自己斟酌。

有关CCF的CSP认证

有关CCF的CSP认证 一、CSP认证考点的知识要求 在数据结构中,线性表是基础,树是常考点,集合和映射要夕纪学。 背包问题(动态规划) 考试要求 二、考试题型 第一题:一般为水题,把C学扎实便可以过 第二题:难度比第一题大,比较多陷阱 第三题:题目很长但是思维难度不会比第二题大 第四题、第五题:难度大,变态题 三、知识点分布 1、字符串 对于字符串的以上处理要做到熟练,并且能够快速讲码打出。 例题分析(2013年12月第二题) C(有越界风险,可用c++的动态数组来写): 问题:输入后只是跳过

weixin_51368761的博客 2万+

数学建模模型总结

这是本人在两年内准备参加数学建模竞赛搜集到的模型资料,已经经过了本人的筛选和整理,希望能够对准备参加数学建模竞赛的学弟学妹们提供一些帮助!

CSP CCF认证介绍 & 备考建议

CCF CSP认证,全称为CCF计算机软件能力认证(Certified Software Professional,简称CSP),是中国计算机学会(CCF)推出的一项针对软件开发者实际编程能力的认证。自2014年首次举办以来,CSP认证已逐渐成为衡量个人计算机专业能力的重要标准,尤其在高校和企业招聘中得到了广泛认可。

Morishima04的博客 5万+

CCF- CSP历年认证考试题目链接+题解总结(持续更新)

CCF- CSP历年认证考试题目链接+题解总结(持续更新ing)

只须一笑不须愁X的博客 1万+

CCF-CSP-2013-12-4-有趣的数(C++详解)

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

weixin_52378361的博客 1043

ccf-csp 201312-4有趣的数

有趣的数题目分析 题目 问题描述 试题编号: 201312-4 试题名称: 有趣的数 时间限制: 1.0s 内存限制: 256.0MB 问题描述: 问题描述 我们把一个数称为有趣的,当且仅当:   1. 它的数字只包含0, 1, 2, 3,且这四个数字都出现过至少一次。   2. 所有的0都出现在所有的1之前,而所有的2都出现在所有的3之前。   3. 最高位数字不为0。   因此,符合我们定义的最小的有趣的数是2013。除此以外,4位的有趣的数还有两个:2031和2301。   请计算恰好有n位的

qq_43688155的博客 400

CCF-CSP认证备考要点

1.注意事项   报名时考试语言选择ALL。编程语言可以选C/C++、Java或Python,不同题可以选用不同语言。   考试时允许携带纸质的书籍和资料,携带纸质资料有助于提高考试成绩。 2.考前准备   (1)不裸考   了解历年考题,了解考题的题型、内容和难度,并且逐题做过。   官方网站:CCF计算机职业资格认证。   在官方网站上注册用户,登录官方网站,逐题练习历年考题。   (2)阅读题解   通过阅读历年题解是一种快速学习的好方法,可以了解解题方法,积累解题经验。 ..

海岛Blog 8万+
上一篇: CCF CSP 网络延时 树的直径
下一篇: CCF CSP 无线网络 BFS
more_ugly_less_bug
博客等级 码龄10年 28粉丝 39原创
评论 2
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值