• 杭电2018----母牛的故事


    杭电ACM2018----母牛的故事

    题目

    问题描述

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

    输入格式

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

    输出格式

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

    样例输入

    2
    4
    5
    0

    样例输出

    2
    4
    6

    分析

    这道题牛个数随年份的增长发生增长,算是动态规划的入门,可以对其进行基础的理解。
    其中状态有2个即年份、个数。只要找到他们的关系,推出状态转移方程即可求解

    代码

     1 #include<stdio.h>        //朴素写法
     2 int main(){
     3     int i,n,a0,a1,a2,a3;
     4     //其中a0代表大于3岁牛的个数,a1代表1岁牛的个数,a2代表2岁牛个数,a3代表3岁牛个数
     5     while(~scanf("%d",&n)&&n){
     6         for(i=a0=1,a1=a2=a3=0; i<n; ++i){
     7             a0=a0+a3;    //今年大于3岁的牛个数 = 去年大于3岁的牛个数 + 去年3岁的牛个数
     8             a3=a2;       //今年3岁的牛个数 = 去年2岁的牛个数
     9             a2=a1;       //今年2岁的牛个数 = 去年1岁的牛个数
    10             a1=a0;       //今年1岁的牛个数 = 今年大于3岁的牛个数(即可生育的牛个数)
    11         }
    12         printf("%d
    ",a0+a1+a2+a3);
    13     }
    14     return 0;
    15 }
     1 #include<stdio.h>     //动态规划的简单应用
     2 int dp[5][55];        // i代表岁数, j代表年份
     3 //dp[0][j]            -> 第j年的牛总数(此处0没有特别含义,仅仅为我自己设定的含义)
     4 //dp[i][j](0 < i < 4) -> 第j年i岁牛的个数
     5 //dp[4][j]            -> 因为i > 3的牛都具有生育能力, 所以无需在单独列出, 即i == 4代表岁数大于3的牛个数
     6 int main(){
     7     int n, i;
     8     dp[0][1] = dp[4][1] = 1; dp[1][1] = dp[2][1] = dp[3][1] = 0;
     9     while(~scanf("%d",&n) && n){
    10         for(int i = 2; i <= n; ++i){
    11             dp[1][i] = dp[4][i-1] + dp[3][i-1];  //今年1岁的牛个数 = 去年大于3岁的牛个数 + 去年3岁的牛个数
    12             dp[2][i] = dp[1][i-1];               //今年2岁的牛个数 = 去年1岁的牛个数
    13             dp[3][i] = dp[2][i-1];               //今年3岁的牛个数 = 去年2岁的牛个数
    14             dp[4][i] = dp[1][i];                 //今年>3岁的牛个数 = 去年>3岁的牛个数 + 去年3岁的牛个数 = 今年1岁的牛个数
    15             dp[0][i] = dp[0][i-1] + dp[1][i];    //今年牛总数 = 去年牛总数 + 今年新出生(1岁)的牛个数
    16         }
    17         printf("%d
    ",dp[0][n]);
    18     }
    19     return 0;
    20 }
  • 相关阅读:
    PHP时间操作
    php实用正则
    PHP正则表达式函数
    PHP常用字符串函数
    PHP数组简单操作
    PHP基础-自定义函数-变量范围-函数参数传递
    PHP常量的定义和用法
    Ajax用法
    DBCP连接池和事物
    ltp-ddt emmc_dd_rw
  • 原文地址:https://www.cnblogs.com/qq188380780/p/6045627.html
Copyright © 2020-2023  润新知