代码神马的

 1 #include<fstream>//竹子 
 2 using namespace std;
 3 ifstream cin("eat.in");
 4 ofstream cout("eat.out");
 5 const int MAXT=100;
 6 int a[MAXT+1],b[MAXT+1];
 7 int main()
 8 {
 9     int t,n,s,k,i,f;//天数、竹子数、竹筒或竹园的开销、收益系数、循环变量、竹筒开始日
10     int z,zz,zt,m;//作竹筒前的竹子数、当前竹子数、当前竹筒数、最好收益
11     bool l=0;//f-1天是否建了竹园
12     cin>>t>>n>>s>>k;
13     for(i=1;i<t;i++)
14         cin>>a[i];
15     m=k*(i=min((n-t)/s,t))+max(n-i*s-t,0);//假设不建竹园
16     z=n;
17     for(f=1;f<=t;f++)
18     {//[1,f)建竹园,[f,t]作竹筒
19         if(l)
20         {//为f后面每天的竹子收入数增加f-1天那个竹园贡献的竹子
21             for(i=f;i<=t;i++)
22                 b[i]+=a[i-f+1];
23         }
24 
25         zz=z,zt=0;//作竹筒前的局部初始化
26         for(i=f;i<=t;i++)
27         {//每天贪心作竹筒
28             zz += b[i];
29             if(--zz>=s)
30             {//吃完1个竹子还够作竹筒
31                 zt++;
32                 zz-=s;
33             }
34             else if(zz<0)
35                 break;
36         }
37         if(i>t)
38             m=max(m,k*zt+zz);
39 
40         z+=b[f]-1;
41         l=z>=s;
42         if(l)
43             z-=s;
44     }
45     cout<<m<<endl;
46     return 0;
47 }

 

posted @ 2015-07-11 14:09  AI_Believer  阅读(210)  评论(0编辑  收藏  举报