题目
代码:
#include <iostream>
using namespace std;
int n,yu[110],jian[110],ge[110],t,dp[110][1010],sum[110],v[110][1010];//dp i j表示在前i个鱼塘中花了j分钟钓鱼能钓到的最大鱼数 v i j表示第i个鱼塘在第j分钟总共可以钓到多少鱼
int main(){
cin>>n;
for(int i=1;i<=n;i++){
cin>>yu[i];
}
for(int i=1;i<=n;i++){
cin>>jian[i];
}
for(int i=2;i<=n;i++){
cin>>ge[i];
sum[i]=sum[i-1]+ge[i];//计入下来走到第i个鱼塘总共用了多久
}
cin>>t;
for(int i=1;i<=n;i++){
v[i][1]=yu[i];
for(int j=2;j<=t;j++){
v[i][j]=max(0,yu[i]-jian[i]*(j-1))+v[i][j-1];
}
}
/*for(int i=1;i<=n;i++){
for(int j=0;j<=t;j++){
cout<<v[i][j]<<" ";
}
cout<<endl;
}*/
for(int i=1;i<=n;i++){
for(int j=0;j<=t;j++){
for(int k=j-ge[i];k>=sum[i];k--){//k表示在前i-1个鱼塘停留了多久,j表示在前i个鱼塘停留了多久
dp[i][j]=max(dp[i][j],dp[i-1][k]+v[i][j]-v[i][k+ge[i]]);//由某一次的状态转移出来再加上收益
}
}
}
cout<<dp[n][t];
return 0;
}
/*
┏┓ ┏┓
┏┛┻━━━┛┻┓
┃ ┃
┃ ━ ┃
┃ ┳┛ ┗┳ ┃
┃ ┃
┃ ┻ ┃
┃ ┃
┗━┓ ┏━┛Codes are far away from bugs with the animal protecting
┃ ┃ 神兽保佑,代码无bug
┃ ┃
┃ ┗━━━┓
┃ ┣┓
┃ ┏┛
┗┓┓┏━┳┓┏┛
┃┫┫ ┃┫┫
┗┻┛ ┗┻┛ ○| ̄|_
*/