HDU 2018 母牛的故事 简单动态规划

题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=2018
题目描述:
有一头母牛,它每年年初生一头小母牛。每头小母牛从第四个年头开始,每年年初也生一头小母牛。请编程实现在第n年的时候,共有多少头母牛?
题解:
针对这道题目我们可以进行如下的分析:
假设g(n,i)表示到第n年年纪为i的牛的数量,其中i=0表示是年龄为0岁(刚出生)的牛,i=1表示是年龄为1岁的牛,i=2表示是年龄为2岁的牛,i=3表示是年龄>=3的牛(因为年龄>=3的牛都是具有生育能力的牛,所以放在一起分析)。可以得出如下状态转移方程:
g(n+1,1)=g(n,0)
g(n+1,2)=g(n,1)
g(n+1,3)=g(n,2)+g(n,3)
g(n+1,0)=g(n+1,3)
一开始当n=1时,g(1,0) = g(1,1) = g(1,2) = 0,g(1,3) = 1。我们可以根据初始条件和上面列出的状态转移方程进行求解。第n年的奶牛总数是g(n,0)+g(n,1)+g(n,2)+g(n,3)。
C++代码:

#include <cstdio>
int n, g[56][4];
void init()
{
    g[1][0] = g[1][1] = g[1][2] = 0;
    g[1][3] = 1;
    for (int i = 2; i <= 55; i ++)
    {
        g[i][1] = g[i-1][0];
        g[i][2] = g[i-1][1];
        g[i][0] = g[i][3] = g[i-1][2] + g[i-1][3];
    }
}
int main()
{
    init();
    while (~scanf("%d", &n) && n)
    {
        printf("%d\n", g[n][0]+g[n][1]+g[n][2]+g[n][3]);
    }
    return 0;
}

最后还有一个问题:问什么母牛生的都是母牛?为什么没有公牛?没有公牛为什么还能生小牛:)

原文地址:https://www.cnblogs.com/sumuzhe/p/7450370.html