55分求助
查看原帖
55分求助
638274
_YQY楼主2023/7/4 17:12
#include<bits/stdc++.h>
using namespace std;
int n,a[1005],m,k,x[1005],s,minn=1e8+9,b,ans=-1;
int dp[1005][1005];//dp[i][j]表示用i时间翻倍了j次后的最大毒瘤程度和 
int main(){
	cin>>n>>m>>k;
	for(int i=1;i<=n;i++){
		cin>>a[i]>>x[i];//权重,时间 
		s+=x[i];minn=min(minn,a[i]);
		b+=a[i];
	}
	if(s<=m) {
		cout<<b-minn<<endl;
		return 0;
	}
	for(int i=1;i<=n;i++){
		for(int j=m;j>=x[i];j--){
			for(int l=k;l>=1;l--){
				dp[j][l]=max(dp[j][l],max(dp[j-x[i]][l]+a[i],dp[j-x[i]][l-1]+a[i]*2));
			} 
		}
	}
	cout<<dp[m][k];
	return 0;
} 
2023/7/4 17:12
加载中...