Pagini recente » Cod sursa (job #2862329) | Cod sursa (job #2040127) | Cod sursa (job #1589287) | Cod sursa (job #510674) | Cod sursa (job #2691234)
#include <bits/stdc++.h>
using namespace std;
int dp[1001][5001];
//ifstream fin("energii.in");
//ofstream fout("energii.out");
int main(){
int N, W;
cin >> N >> W;
int energie[N + 1], cost[N + 1], max_cost = 0, max_energie = 0;
energie[0] = 0;
cost[0] = 0;
for(int i = 1; i <= N; ++i){
cin >> energie[i] >> cost[i];
max_cost += cost[i];
max_energie += energie[i];
}
if(max_energie < W){
cout << "IMPOSIBIL" << "\n";
return 0;
}
for(int i = 0; i <= N; ++i){
for(int j = 0; j <= max_cost; ++j){
if(i == 0 || j == 0){
dp[i][j] = 0;
}
else if(cost[i] <= j){
dp[i][j] = max(dp[i - 1][j], energie[i] + dp[i - 1][j - cost[i]]);
}
else{
dp[i][j] = dp[i - 1][j];
}
}
}
int min_j = max_cost;
for(int i = 0; i <= N; ++i){
for(int j = 0; j <= max_cost; ++j){
if((dp[i][j] >= W) && (j < min_j)){
min_j = j;
}
}
}
cout << min_j << "\n";
return 0;
}