Untitled
unknown
c_cpp
9 months ago
1.1 kB
10
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