悬关
  • 板块学术版
  • 楼主rnf5114
  • 当前回复2
  • 已保存回复2
  • 发布时间2024/1/18 23:32
  • 上次更新2024/1/19 11:49:49
查看原帖
悬关
917683
rnf5114楼主2024/1/18 23:32

题目

代码:

#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
         ┃   ┃
         ┃   ┗━━━┓
         ┃      ┣┓
         ┃     ┏┛
         ┗┓┓┏━┳┓┏┛
           ┃┫┫ ┃┫┫
           ┗┻┛ ┗┻┛     ○| ̄|_

*/

2024/1/18 23:32
加载中...