60分求调
查看原帖
60分求调
1674226
markwu1楼主2025/7/23 19:12
#include<bits/stdc++.h>
using namespace std;
int n=0;
int L=0;
int c[508]={0};
int l[508]={0};
vector<long long> dp={0};
long long ans=500000008;
int all=0;
int main(){
	cin>>n>>L;
	for(int i=1;i<=n;i++){
		cin>>c[i]>>l[i];
		all=all+c[i];
	}
	dp.resize(all+1);
	for(int i=1;i<=n;i++){
		for(int j=all;j>=c[i];j--){
			dp[j]=max(dp[j],dp[j-c[i]]+l[i]);
			if(dp[j]>=L){
				ans=min(ans,(long long)j);
			}
		}
	}
	if(ans==500000008){
		cout<<"no solution";
		return 0;
	}
	cout<<ans;
}
2025/7/23 19:12
加载中...