Pagini recente » Cod sursa (job #2726837) | Borderou de evaluare (job #2051265) | Cod sursa (job #21493) | Cod sursa (job #2998888) | Cod sursa (job #1038462)
#include <stdio.h>
#define NMAX 10000000
#define INF 999999999
using namespace std;
int G, W, i, j, smax;
int E[NMAX], C[NMAX], v[NMAX];
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 <= smax; i++){
v[i] = INF;
}
v[0] = 1; smax = 0;
int minimum = 999999999;
for(i = 1; i <= G; i++){
for(j = W; j >= 0; j--){
if(v[j]){
if(v[j + E[i]] != INF){
v[j + E[i]] = v[j] + C[i];
if(j == 0){
v[j + E[i]]--;
}
}else{
if(j == 0){
v[j + E[i]] = min(v[j + E[i]], (v[j] - 1 + C[i]));
}else{
v[j + E[i]] = min(v[j + E[i]], (v[j] + C[i]));
}
}
if(j + E[i] >= W){
if(v[j + E[i]] < minimum){
minimum = v[j + E[i]];
}
}
}
}
smax += E[i];
}
if(minimum == 999999999){
printf("-1\n");
}else{
printf("%d\n", minimum);
}
}