HDU OJ 2018 母牛的故事

来源:互联网 发布:石某鹏情杀网络女主播 编辑:程序博客网 时间:2024/05/21 09:19

母牛的故事

Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others)
Total Submission(s): 85989    Accepted Submission(s): 42828


Problem Description
有一头母牛,它每年年初生一头小母牛。每头小母牛从第四个年头开始,每年年初也生一头小母牛。请编程实现在第n年的时候,共有多少头母牛?
 

Input
输入数据由多个测试实例组成,每个测试实例占一行,包括一个整数n(0<n<55),n的含义如题目中描述。
n=0表示输入数据的结束,不做处理。
 

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

Sample Input
2450
 

Sample Output
246
 

Author
lcy
 

Source
C语言程序设计练习(三)
 

Recommend

lcy   |   We have carefully selected several similar problems for you:  2013 2041 2017 2010 2046 



动态规划的一种题型

具体思路 :



/*
模拟找规律:(括号里面代表牛是第几年的 只有四年牛才会产小牛)


典型的动态规划题目:


我们用dp_1,dp_2,dp_3,dp_4;分别来表示一年牛,两年牛,三年牛,四年牛;
依照题目意思 只有四年牛 才可以生小牛。


第1年~   dp_4          1头
第2年~   dp_4   +  dp_1                                     2头
第3年~   dp_4   +  dp_2   + dp_1      3头
第4年~   dp_4   +  dp_3   + dp_2   + dp_1    4头
第5年~   dp_4*2 +  dp_3   + dp_2   + dp_1*2    6头
第6年~   dp_4*3 +  dp_3   + dp_2*2 + dp_1*3    9头
第7年~   dp_4*4 +  dp_3*2 + dp_2*3 + dp_1*4    13头
第8年~   dp_4*6 +  dp_3*3 + dp_2*4 + dp_1*6    19头




这里有 一年的四年牛的数量   :dp_4(n)   =  dp_4(n-1) + dp_3(n-1);           上一年的四年牛加 三年牛 
而三年牛的数量        :dp_3(n-1) =  dp_2(n-2);       上一年的两年牛数量
同理两年牛的数量    :dp_2(n-2) =  dp_1(n-3);       上一年的一年牛数量


          所以     dp_4(n) = dp_4(n-1) + dp_1(n-3) ;     A        等于上一年的四年牛+三年前的一年牛
          
          同理     :   dp_4(n-1) = dp_4(n-2) +dp_3(n-2);
           :   dp_3(n-2) = dp_2(n-3);
 
          所以            dp_4(n-1) = dp_4(n-2)+dp_2(n-3);       B


然后            dp_4(n-2) = dp_4(n-3)+dp_3(n-3);       C


        C代入B然后再代入A 得   dp_4(n)   = dp_1(n-3)+dp_2(n-3)+dp_3(n-3)+dp_4(n-3)   =  f(n-3);  


  而    dp_4(n) 就代表着 这一年 新增牛的数量 即 dp_4(n)=dp_1(n);

所以有       f(n) - f(n-1) = dp_1(n) = dp_4(n) = f(n-3)   
   f(n)=f(n-1)+f(n-3);

 */


/*   母牛生小牛 */// code:#include <iostream>using namespace std;int f(int n) {if (n==0) return 0;if (n>=1&&n<=4)return n;else return f(n-1)+f(n-3); }int  main() {int n;while(cin>>n,n) cout<<f(n)<<endl;return 0;}
提交代码




原创粉丝点击