DP 动态规划 Problem M 1013 母牛问题

来源:互联网 发布:武汉网络中控机 编辑:程序博客网 时间:2024/06/06 09:32

Problem M  ID:1013


简单题意:初始有一头母牛,每年年初生一头母牛,所有新出生的母牛从出生后的第四个年头开始,每年都生一头母牛。求第n年共有多少头母牛。


解题思路形成过程:使用两个数组,一个数组a存放(所有)当年出生的母牛数,另一个数组b存放(所有)从第一年到当年的总母牛数。

            n<=3时,a[1]=1;a[2]=1;a[3]=1; b[1]=1;b[2]=2;b[3]=3;

            n>3时,a[i]=a[i-3]+a[i-1];   b[i]=b[i-1]+a[i-1];

            因为n的最大值是54,可以对所有的n进行预处理,将所有的结果存入数组中。

            然后根据输入的n,直接调用数组输出结果即可。


感想:同样是一个比较简单的dp问题,但是一开始使用了错误的状态转移方程式,并导致了WA。

    分析的时候要抓住本质,要抓住最根本的规律。

    注意预处理。


代码:

#include <iostream>#include <stdio.h>#include <string.h>using namespace std;int a[60],b[60];int main(){    int n;    //freopen("1.txt","r",stdin);    a[1]=1;a[2]=1;a[3]=1;    b[1]=1;b[2]=2;b[3]=3;    for(int i=4;i<57;++i)    {        a[i]=a[i-3]+a[i-1];        b[i]=b[i-1]+a[i-1];    }    while(1)    {        scanf("%d",&n);        if(n==0)            return 0;        printf("%d\n",b[n]);    }}



0 0