东湖之滨 发表于 2022-6-25 01:04:40

第十三届蓝桥杯c++b组2022年国赛决赛题解

题目pdf下载:十三届蓝桥杯c++b组2022国赛题目pdf下载
G题没有写,J题是暴力的,其他好像都写出来,但是估计还是有错的。
目录
正文:
试题 A: 2022
试题 B: 钟表
试题 C: 卡牌
试题 D: 最大数字
试题 E: 出差
试题 F: 费用报销
试题 G: 故障
试题 H: 机房
试题 I: 齿轮
试题 J: 搬砖
结尾:

正文:

试题 A: 2022

https://img-blog.csdnimg.cn/539aef8ddc064c08a24865ed2b7e65d3.png
题意: 2022分为不同十个不同的正整数的情况数。
思路:动态规划,我的答案是:379187662194355221。
        以为挺简单的,但是dfs写完连100都跑不出来,这题难度不简单,估计卡了不少人时间
后面暴力出了答案,从55开始有答案(因为最小的十个不同的正整数是:1,2,3,4...10,和是55),根据前10个数很像哈代-拉马努金拆分数列,然后求出来和后面的不一样,而且会炸long long,所以这个数列应该是错的。
https://img-blog.csdnimg.cn/8dc63af453a44b2086933860bacf715e.png
https://img-blog.csdnimg.cn/936f53b0804f400ea7bc9d1d1a335791.png
https://img-blog.csdnimg.cn/f9980497d4d24eaaa642158806f7cc87.png
动态规划思路:
       解释在下面动态规划代码的注释,大致就是dp=dp+dp+dp....+dp的动态规划,用倒叙去实现每个整数只用一次(类似01背包)。
暴力代码:
#include#include#include#includeusing namespace std;int a=55;int ans=0;void dfs(int d,int sum,int pre){      //d是选的数量,sum是选的和,pre是上次选的点    if(d==10){      if(sum==a)      ans++;      return;    }    for(int i=pre+1;i
页: [1]
查看完整版本: 第十三届蓝桥杯c++b组2022年国赛决赛题解