C++-蝴蝶繁殖(变态斐波拉且数列)问题解题思路
2022/2/20 14:26:18
本文主要是介绍C++-蝴蝶繁殖(变态斐波拉且数列)问题解题思路,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
【Horn Studio】编程专栏:C++-蝴蝶繁殖(变态斐波拉且数列)问题
题目描述
在一个神秘的森林中某种蝴蝶化茧成蝶繁殖的过程为:
每对蝴蝶过x个月产y对卵,每对卵要过两个月长成蝴蝶。
假设每个蝴蝶都不死的情况下,第一个月只有一对蝴蝶,且卵长成蝴蝶后的第一个月不产卵(过x个月产卵),问过z个月以后,共有多少对蝴蝶?
输入
x,y,z的数值输出
过z个月以后,共有多少对蝴蝶。样例输入
1 2 8
样例输出
37从这道题我们可以看出来这一道题是一道变态型斐波拉且数列(很重要!),同样是一道DP型题目,但也不是一道很简单的题目,首先我们先要搞清怎么做,提示:0=<x<=20,1<=y<=20,x=<z<=50,这说明我们并不用考虑大数越界的风险,这里的dp方程有两个,分别是
a[i] = a[i - 1] + b[i - 2];//斐波拉且方式相加 b[i] = a[i - x] * y;//i-月份*卵对数
对于初始化,我们还需要:
for (int i = 0; i < x; ++i) { a[i] = 1;//初始化为1 }
至此,整个代码就可以算完了,加头加尾变完事!
显出完整代码:
#i n c l u d e <b i t s / s t d c + + . h> u s i n g n a m e s p a c e s t d; int x, y, z; long long a[55], b[55]; //禁止盗用! int main() { cin >> x >> y >> z; for (int i = 0; i < x; ++i) { a[i] = 1; } for (int i = x; i <= z; ++i) { a[i] = a[i - 1] + b[i - 2]; b[i] = a[i - x] * y; } cout << a[z]; return 0; }
这篇关于C++-蝴蝶繁殖(变态斐波拉且数列)问题解题思路的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 2024-12-25TypeScript基础知识详解
- 2024-12-25安卓NDK 是什么?-icode9专业技术文章分享
- 2024-12-25caddy 可以定义日志到 文件吗?-icode9专业技术文章分享
- 2024-12-25wordfence如何设置密码规则?-icode9专业技术文章分享
- 2024-12-25有哪些方法可以实现 DLL 文件路径的管理?-icode9专业技术文章分享
- 2024-12-25错误信息 "At least one element in the source array could not be cast down to the destination array-icode9专业技术文章分享
- 2024-12-25'flutter' 不是内部或外部命令,也不是可运行的程序 或批处理文件。错误信息提示什么意思?-icode9专业技术文章分享
- 2024-12-25flutter项目 as提示Cannot resolve symbol 'embedding'提示什么意思?-icode9专业技术文章分享
- 2024-12-24怎么切换 Git 项目的远程仓库地址?-icode9专业技术文章分享
- 2024-12-24怎么更改 Git 远程仓库的名称?-icode9专业技术文章分享