Pagini recente » Cod sursa (job #2989876) | Cod sursa (job #2318594) | Cod sursa (job #2783911) | Cod sursa (job #540356) | Cod sursa (job #1052088)
#include <stdio.h>
#include <algorithm>
#define NMAX 10000000
using namespace std;
int G, W, i, j, smax;
int E[NMAX], C[NMAX], v[1001][5001];
int minimum = 999999999;
inline int min(int a, int b){
if(a < b){
return a;
}
return b;
}
int main(){
freopen("energii.in", "r", stdin);
freopen("energii.out", "w", stdout);
scanf("%d%d", &G, &W);
for(i = 1; i <= G; i++){
scanf("%d%d", &E[i], &C[i]);
smax += E[i];
}
for(i = 0; i <= W; i++)
v[0][i] = minimum;
for(i = 0; i <= G; i++)
v[i][0] = minimum;
for(i = 1; i <= G; i++){
for(j = 1; j <= W; j++){
if(E[i] >= j){
if(v[i - 1][j] > C[i]){
v[i][j] = C[i];
}else{
v[i][j] = v[i - 1][j];
}
}
else{
if(v[i - 1][j] < v[i - 1][j - E[i]] + C[i])
v[i][j] = v[i - 1][j];
else
v[i][j] = v[i - 1][j - E[i]] + C[i];
}
}
}
if(smax < W){
printf("-1\n");
}else{
printf("%d\n", v[G][W]);
}
}