zoukankan      html  css  js  c++  java
  • 新生赛(2) problem 2 丁磊养猪

    Problem B

    Time Limit : 2000/1000ms (Java/Other)   Memory Limit : 32768/32768K (Java/Other)
    Total Submission(s) : 39   Accepted Submission(s) : 7

    Font: Times New Roman | Verdana | Georgia

    Font Size:  

    Problem Description

    丁磊同志是163网站CEO,三十多岁了,为了促进中国的养猪事业,受网易董事会和数千员工的委托,不惜千万,投资养猪。一个IT人,毫无利己的动机,把中国人民的养猪事业当做他自己的事业,这是什么精神?这是国际互联主义的精神,这是共同IT主义的精神,每一个中国IT人都要学习这种精神。 ——摘自《赞“丁磊养猪”》


      2009年2月17日,丁磊公开表示,网易将投资数千万元在浙江建立养猪场,并将为此创办养猪网,将农业与互联网行业相结合。
      在当今互联网时代,人们见证了芙蓉姐姐的成名历程,也习惯了诸如凤姐等人的作秀炒作,按说区区一个“养猪事件”也应该见怪不怪了,但丁磊养猪消息一出,众人仍然被雷到了,雷得大家不得不去认真搜索一下这场互联网史上最严肃的作秀,以窥其养猪背后真正的目的。  但不管外界如何看待此事,引起广泛关注的 “丁磊养猪”计划逐渐从口号变为现实——
    2009年11月,网易在浙江的生猪养殖基地已经选定,并已经准备好一切硬件条件。
      在2010年1月1日,基地引进一只刚出生的母猪幼仔,假设每只小母猪从第3个年头开始,每年的第一天都会生出4只小母猪,另外,基地也在每年的12月31日售出所有差一天就要年满5周岁的猪。请帮忙计算在第N年(2010年是第一年)的今天(6月13日),网易的养猪基地会存栏多少只猪?

    Input

      输入数据第一行是一个整数T(0<T<=40).
      接下来有T行,每行有一个数N(0<N<=40)含义如上所述

    Output

      对于每个测试实例,输出在第N年年中的时候母猪的数量,每组数据的输出占一行。

    Sample Input

    3
    2
    3
    5

    Sample Output

    1
    5
    29
    

                                                                                                  Statistic | Submit | Back
    一开始打算用递推公式。。
    结果推到姥姥家了还是WA。特殊情况要考虑太多

    结束后才想到直接模拟即可了。复杂度也不过是(T+MAXN*3)
    不过要点技巧

    思考一下 每年的猪和什么有关系
    前一年剩余的猪+出生的猪-被卖掉的猪
    每一年剩余的猪用ANS[i]来表示 
    而出生的猪和被卖掉的猪是否能用ANS[i]表示呢 可是可以用 只是似乎十分的麻烦 
    要计算出第i-4 到 i-2年有多少新出生的猪总和 如果用ANS[]表示的话 还要考虑如何减去被卖掉的猪 又涉及前面的东西 十分麻烦
    既然提到了新出生的猪 我们难道不能直接用一个数组 存储每年新出生的猪?
    data[i]=(data[i-4]+data[i-3]+data[i-2])*4;
    被卖的猪=i-5年前出生的猪=data[i-5]

    所以ANS[i]=ANS[i-1]+data[i]-data[i-5];
    先预处理ANS[MAXN]
    复杂度(T+MAXN*3)
    #include<stdio.h>
    int data[41];
    int ans[41];
    int main()
    {
    	int i,j;
    	data[1]=1;data[2]=0;data[3]=4;data[4]=4;data[5]=20;
    	ans[1]=1;ans[2]=1;ans[3]=5,ans[4]=9,ans[5]=29;
    	for(i=6;i<=40;i++)
    	 {
    	 	for(j=i-4;j<=i-2;j++)
    	 	data[i]+=data[j]*4;
    	 	ans[i]=ans[i]+ans[i-1]+data[i]-data[i-5];
    	 }
    	int N,n;
    	while(scanf("%d",&N)!=EOF)
    	{
    			while(N--)
    			{
    				scanf("%d",&n);
    				printf("%d
    ",ans[n]);	
    			}
    	}
    	return 0;
    }


  • 相关阅读:
    使用URLEncoder、URLDecoder进行URL参数的转码与解码
    js中的连等==和全等===
    sass用法
    sass/scss 和 less的区别
    JSON与localStorage的爱恨情仇
    ionic2
    雪碧图
    JavaScript交换两个变量值的七种解决方案
    JavaScript中的[]和{}
    为什么 ++[[]][+[]]+[+[]] = 10?
  • 原文地址:https://www.cnblogs.com/zy691357966/p/5480477.html
Copyright © 2011-2022 走看看