36分求助
查看原帖
36分求助
952033
lutaoquan2012楼主2023/7/8 11:02
#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
ll n,SIQ;
ll dp[1100],ans;
struct node{
	ll IQ,EQ;
}a[1100];
bool cmp(node x,node y){
	if(x.IQ!=y.IQ) return x.IQ>y.IQ;
	return x.EQ>y.EQ;
}
int main(){
	scanf("%lld",&n);
	for(int i=1;i<=n;i++) scanf("%lld%lld",&a[i].IQ,&a[i].EQ);
	sort(a+1,a+n+1,cmp);
	memset(dp,~0x3f,sizeof(dp));
	dp[0]=0;
	for(int i=1;i<=n;i++){
		if(a[i].IQ<=0&&a[i].EQ<=0) continue;
		if(a[i].IQ>=0){
			SIQ+=a[i].IQ;
			for(int j=SIQ;j>=a[i].IQ;j--){
				dp[j]=max(dp[j],dp[j-a[i].IQ]+a[i].EQ);
				if(dp[j]>0) ans=max(ans,dp[j]+j);
			}
		}else{
			for(int j=0;j<=a[i].IQ+SIQ;j++){
				dp[j]=max(dp[j],dp[j-a[i].IQ]+a[i].EQ);
				if(dp[j]>0) ans=max(ans,dp[j]+j);
			}
		}
	}
	printf("%d",ans);
	return 0;
}
2023/7/8 11:02
加载中...