zoukankan      html  css  js  c++  java
  • 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;
    }

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

  • 相关阅读:
    Codeforces_739_B
    Codeforces_732_D
    D
    C
    E
    商汤AI园区的n个路口(中等)
    D. The Fair Nut and the Best Path
    HDU6446
    分解质因数(线性筛)
    D. Extra Element
  • 原文地址:https://www.cnblogs.com/sumuzhe/p/7450370.html
Copyright © 2011-2022 走看看