用递推的方式,把牛分成两种,找对应关系
今天突然发现原来这种题也是DP,以前总觉得是找规律什么的,一通乱搞
总结一下目前遇到的两道DP题,DP的递推按时间线和路径线,还有把结果进行分类,这些地方都挺重要的
#include<stdio.h> int dp[60][2];//dp[i][0]:第i天大牛数 dp[i][1]:第i天小牛数 int main(){ int n; #ifndef ONLINE_JUDGE freopen("in.txt","r",stdin); #endif dp[1][0]=1;dp[2][0]=1;dp[3][0]=1;dp[4][0]=1; dp[1][1]=0;dp[2][1]=1;dp[3][1]=2;dp[4][1]=3; for(int i=5;i<=55;i++){ dp[i][0]=dp[i-1][0]+dp[i-3][0];//小牛一长成大母牛就马上会生,即相当于过三年长大,第4年生 dp[i][1]=dp[i-1][1]+dp[i-1][0]; } while(scanf("%d",&n),n){ printf("%d\n",dp[n][0]+dp[n][1]); } }
原文地址:http://blog.csdn.net/lj94093/article/details/45126015