”十分需要帮助“
查看原帖
”十分需要帮助“
1052827
xiaobei10楼主2024/11/24 17:20
#include<bits/stdc++.h>
using namespace std;
 
 int n,p,S;
 const int N=1e4+5;
 int dp[1000010];
 int w[N],v[N]; 
 int hhh=-1,lll=1e8;
 
bool check(int x){
	if(x<hhh) return false;
	for(int i=1;i<=n;i++){
		for(int j=S;j>=w[i];j--){
			dp[j]=max(dp[j],(dp[j-w[i]]+v[i]));
			if(dp[j]>S) return true;
		}
	}
	return false;
}

int main() {
    cin>>n>>p>>S;
    for(int i=1;i<=n;i++){
    	cin>>w[i]>>v[i];
    	hhh=max(hhh,w[i]);
    	lll=min(lll,w[i]);
	}
	int l=lll,r=hhh;
	int mid=(l+r)/2;
	while(l<r){
		mid=(l+r)/2;
		if(check(mid)){
			r=mid;	
		}else{
			l=mid+1;
		}
	}
	
    if(mid){
    	cout<<"No Solution!";
	}else{
		cout<<mid+1;
	}
    
    return 0;
}
2024/11/24 17:20
加载中...