fishing

发布时间 2023-06-08 13:05:44作者: Zimo_666
点击查看代码
#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;
}