zoukankan      html  css  js  c++  java
  • 杭电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 }
  • 相关阅读:
    这两天又是一次巨大的飞跃
    防范式编程:
    泛型那点儿事儿 泛型概述 简单样例代码
    FindPrivateKey X509
    Remoting Generic Async Queue (Release 3) 不受 Remoting 对象生存期过期约束
    AntiXSS Library v3.0
    X509 static RSACryptoServiceProvider 高并发加解密
    EncodingHelper Identify Encoding by BOM
    NetStatTool
    EditPlus 于 20090602 升级到 v3.11(340)
  • 原文地址:https://www.cnblogs.com/qq188380780/p/6045627.html
Copyright © 2011-2022 走看看