70分,求助
查看原帖
70分,求助
1105817
z66s666楼主2024/12/16 21:40
#include<iostream>
using namespace std;
int main(){
	int T,M;                   //总时间,草药数目 
	cin>>T>>M;
	int t[M],v[M];
	for(int i=0;i<M;i++){
		cin>>t[i]>>v[i];
	}
	int dp[M+1][T+1];          //动态规划:最大总价值是采药时间和草药数目的函数 
	for(int i=0;i<=T;i++){     //初始化数据:没草药或者没时间 
		dp[0][i]=0;
	}
	for(int i=0;i<=M;i++){
		dp[i][0]=0;
	}
	int a,b; 
	for(int i=1;i<=M;i++){     //对二维数组循环,逐渐增加草药数量和时间,最大价值是采增加的一株草药或者不采的情况的更大值 
		for(int j=1;j<=T;j++){
			a=dp[i-1][j];
			if(j>=t[i]){
				b=dp[i-1][j-t[i]];
				dp[i][j]=max(a,b+v[i]);
			}
			else{
				dp[i][j]=a;
			}
		}
	}
	cout<<dp[M][T]; 
}
2024/12/16 21:40
加载中...