1 solutions
-
0
C++ :
#include<iostream> #include<cstring> #include<algorithm> using namespace std; const int N(16*60/5+5),M(30); //M:池塘上界 N:单位时间上界 int tim[M],t[M],first[M],d[M],f[M][N],ans(0); int main() { // ifstream cin("fish.in"); // ofstream cout("fish.out"); int h,n; cin>>n>>h; h=h*60/5; for (int i=1;i<=n;i++) cin>>first[i]; for (int i=1;i<=n;i++) cin>>d[i]; t[0]=0; for (int i=1;i<n;i++) { cin>>tim[i]; t[i]=t[i-1]+tim[i]; } memset(f,0,sizeof(f)); for (int j=1;j<=h;j++) if (first[1]-(j-1)*d[1]) f[1][j]=first[1]*j-j*(j-1)*d[1]/2; else f[1][j]=f[1][j-1]; ans=f[1][h]; for (int i=2;i<=n;i++) for (int j=t[i-1]+1;j<=h;j++) { f[i][j]=f[i-1][j-tim[i-1]]; for (int k=1;k<=j-t[i-1]&&first[i]-(k-1)*d[i]>0;k++) f[i][j]=max(f[i][j],f[i-1][j-tim[i-1]-k]+k*first[i]-k*(k-1)/2*d[i]); ans=max(ans,f[i][j]); } cout<<ans<<endl; return 0; }
- 1
Information
- ID
- 18993
- Time
- 1000ms
- Memory
- 128MiB
- Difficulty
- (None)
- Tags
- # Submissions
- 0
- Accepted
- 0
- Uploaded By