Untitled

 avatar
unknown
c_cpp
9 months ago
1.1 kB
11
Indexable
#include<bits/stdc++.h>
using namespace std; 
const int maxn = 100 + 5, maxval = 1e5 + 5; 
const long long maxv = 1e15; 
long long dp[maxn][maxval], wei[maxn], val[maxn]; 

int main(){
	int n, w; 
	cin >> n >> w; 
	for(int i = 1; i <= n; i++){ 
		cin >> wei[i] >> val[i];
	} 
	
	dp[0][0] = 0; 
	for(int i = 1; i < maxval; i++){
		dp[0][i] = maxv;
	} 
	
	for(int i = 1; i <= n; i++){
		for(int j = 0; j <= maxval; j++){
			dp[i][j] = maxv; 
			if(j - val[i] >= 0 && dp[i - 1][j - val[i]] != maxv){ 
				if(dp[i - 1][j] != maxv){ 
					dp[i][j] = min(dp[i - 1][j - val[i]] + wei[i], dp[i - 1][j]); 
				} 
				else{ 
					dp[i][j] = dp[i - 1][j - val[i]] + wei[i]; 
				} 
			} 
			else{ 
				dp[i][j] = dp[i - 1][j];
			} 
			//cout << dp[i][j] << '\n';
		} 
	} 
	
	
	long long minn;
	for(int j = maxval - 1; j >= 0; j--){
		minn = dp[1][j];
		for(int i = 2; i <= n; i++){ 
			if(dp[i][j] < minn && dp[i][j]){ 
				minn = dp[i][j];
			} 
			//cout << "FGFVFV"; 
		} 
		
		if(minn <= w){ 
			cout << j; 
			return 0; 
		} 
	} 
}
Editor is loading...
Leave a Comment