题目叙述:前面说的很明白了,前四个值分别为定值(1,2,3,4,) 动态规划(这里记忆化递归所用的数组用int类型即可)和递归均可(没超时)。
思路:前四年很简单,第四年后,牛的数量由两部分构成,去年的所有牛和所生下的小牛组成,前者就是f(n-1),由于不是所有牛都能生小牛,只有3年以前的老牛才会生小牛,而每只老牛只生一只小牛,第n年所生牛的数量就应该是f(n-3)
代码:
#include<iostream>
using namespace std;
int main()
{
int n;
int a[50];
a[1]=1;
a[2]=2;
a[3]=3;
a[4]=4;
for(int i=5;i<=50;i++)
{
a[i]=a[i-1]+a[i-3];
}
while(cin>>n)
{
if(n==0) break;
else cout<<a[n]<<endl;
}
return 0;
}
/*#include <iostream>
using namespace std;
int f(int a)
{
if(a<5) return a;
else return f(a-1)+f(a-3);
}
int main()
{
int n;
while(cin>>n)
{
if(n==0) break;
cout<<f(n)<<endl;
}
return 0;
}*/
感想:也是从后面分析得到的公式。。