点击查看代码
#include<bits/stdc++.h>
using namespace std;
#define int long long
int n;
const int N=1e3+7;
int fish[N],offf[N],st[N],t[N],maxtime[N];
int endt;
int f[N][N],dp[N][N];
signed main(){
freopen("fishing.in","r",stdin);
freopen("fishing.out","w",stdout);
cin>>n;
for(int i=1;i<=n;i++) scanf("%lld",&fish[i]);
for(int i=1;i<=n;i++) scanf("%lld",&offf[i]);
for(int i=1;i<=n-1;i++){
scanf("%lld",&t[i]);
st[i+1]=st[i]+t[i];
}
cin>>endt;
for(int i=1;i<=n;i++){
for(int j=1;fish[i]>0;j++){
f[i][j]=f[i][j-1]+fish[i];
fish[i]-=offf[i];
maxtime[i]=j;
}
}
for(int i=1;i<=n;i++){
for(int j=1;j<=endt;j++){
for(int k=0;k<=j-st[i]&&k<=maxtime[i];k++){//保证k时刻有鱼并且可以走到。
int time_left=j-t[i-1]-k;//时间-走到i的位置-在i的k时间。
dp[i][j]=max(dp[i][j],dp[i-1][time_left]+f[i][k]);//在i鱼塘钓k分钟
}
}
}
int ans=-1;
for(int i=1;i<=n;i++){
ans=max(ans,dp[i][endt]);
}
printf("%lld",ans);
return 0;
}