Online Judge | Problem Set | Authors | Online Contests | User | ||||||
---|---|---|---|---|---|---|---|---|---|---|
Web Board Home Page F.A.Qs Statistical Charts | Current Contest Past Contests Scheduled Contests Award Contest |
无言#include "iostream" using namespace std; #define big 100 main() { //int cas;//n个事件 int n;//n个湖 int h;//h个小时 int left=0;//现在剩下的时间 int fi[big];//湖的初始钓总鱼量 int di[big];//钓鱼量减小数 int fn[big];//当前鱼量 int fmax=0;//最大鱼量 int sum=0;//所钓的鱼量 int sumax=0; int fk=0; int ti[big];//湖之间的走路的时间 int end[big];//记录在那个湖结束钓鱼的总时间 int i,j,k; int take[big]={0};//每次的时间..这两个take都是为了输出而用的...对题目的求解没有用 int taketime[big]={0};//最大的确定时间 while(1){ left=0; cin>>n; if(n==0)break; cin>>h; h=h*60;//h为小时 for(i=0;i<n;i++)cin>>fi[i]; for(i=0;i<n;i++)cin>>di[i]; end[0]=0; for(i=0;i<n-1;i++){ cin>>ti[i]; end[i+1]=end[i]+ti[i]*5; } sumax=0; for(i=0;i<n;i++){ left=h-end[i]; for(k=0;k<=i;k++){ fn[k]=fi[k];//初值 take[k]=0; } while(left>0){ fmax=fn[0]; for(k=0;k<=i;k++){ // if(fk==k)fn[k]=fn[k]-di[k];//上次钓了就减 //if(fn[k]==0)continue; if(fmax<fn[k]){ fmax=fn[k];//找之中的最大 fk=k; } } if(fmax==0)break; sum+=fmax; fn[fk]=fn[fk]-di[fk];//上次钓了就减 if(fn[fk]<0)fn[fk]=0; //if(fmax<0)fmax=0; left-=5; take[fk]+=5; fk=0; } take[0]+=left; //cout<<sum<<endl; if(sumax<sum){ sumax=sum; for(k=0;k<n;k++){ taketime[k]=take[k]; take[k]=0;//清0,为下次用 } } else if( sum==sumax ) { for(k=0;k<n;k++) if(taketime[k] <take[k]) break; if(k != n) { for(k=0;k<n;k++)taketime[k] = take[k]; sumax = sumax; } } sum=0; fk=0; } for(k=0;k<n-1;k++){ cout<<taketime[k]<<", "; taketime[k]=0; } cout<<taketime[k]<<endl; taketime[k]=0; cout<<"Number of fish expected: "<<sumax<<endl;//所钓鱼的最大鱼量 cout<<endl; } } Followed by:
Post your reply here: |
All Rights Reserved 2003-2013 Ying Fuchen,Xu Pengcheng,Xie Di
Any problem, Please Contact Administrator