算法笔记--动态规划--母牛的故事

题目是这样的:
Problem Description
有一头母牛,它每年年初生一头小母牛。每头小母牛从第四个年头开始,每年年初也生一头小母牛。请编程实现在第n年的时候,共有多少头母牛?
 
Input
输入数据由多个测试实例组成,每个测试实例占一行,包括一个整数n(0<n<55),n的含义如题目中描述。
n=0表示输入数据的结束,不做处理。

Output
对于每个测试实例,输出在第n年的时候母牛的数量。
每个输出占一行。
 
Sample Input
 
  
2 4 5 0

Sample Output
 
  
2 4 6

生牛总数就是三年前所有牛的总数,一头牛只能一下生一头,且有三年延迟,加上去年所有牛的数量。

加入一头牛一次能生两头牛,显然就是三年前总数的两倍,因为三年前的所有牛都可以在今年生小牛,且一次生两只。

这个逻辑是完备的,每一年的数量就是继承去年的数量和新产生的数量,这可以类比到生产产品,总产品数就是以前所有

产品加上新生产的产品数量。

要注意的是题目中给出的样例,第一年是一头牛,默认母牛从第二年开始生产 ,因此f(1)=1

这道题我给出的是用循环完成递推式,比较好理解。

#include<iostream>
using namespace std;

const int N = 55;
int main(){
	int f[N];
	int n;
	cout<<"请输入总共过去多少年:";
	cin>>n;
	f[0] = 1;
	f[1] = 2;
	f[2] = 3;
	f[3] = 4;
	for(int i = 3; i < n; i++){
		f[i] = f[i-1] + f[i-3];
	}
	cout<<"经过"<<n<<"年总共有"<<f[n-1]<<"头母牛。"<<endl; 
}

猜你喜欢

转载自blog.csdn.net/legendary_idiot/article/details/80183988
今日推荐