Pagini recente » Istoria paginii runda/cni_pn | Istoria paginii calibrare-limite-de-timp | Cod sursa (job #2018389) | Atasamentele paginii lot_warmup_22_1 | Cod sursa (job #652570)
Cod sursa(job #652570)
/*
* File: main.c
* Author: mihai
*
* Created on December 25, 2011, 12:57 AM
*/
#include <stdio.h>
#include <stdlib.h>
#define min(a, b) (a) < (b) ? (a) : (b)
/*
*
*/
int main(int argc, char** argv) {
freopen("energii.in", "r", stdin);
freopen("energii.out", "w", stdout);
int w, g, i, j, l;
scanf("%d %d", &g, &w);
int *a[2], *din[2];
a[0] = (int*) calloc(g, sizeof (int));
a[1] = (int*) calloc(g, sizeof (int));
din[0] = (int*) calloc(w + 1, sizeof (int));
din[1] = (int*) calloc(w + 1, sizeof (int));
for (i = 0; i < g; i++)
scanf("%d %d", &a[0][i], &a[1][i]);
l = 0;
for (i = 0; i < g; ++i, l = 1 - l)
for (j = 1; j <= w; j++) {
if (j >= a[0][i]) {
if (din[l][j - a[0][i]] != 0 && din[l][j] != 0)
din[1 - l][j] = min(din[l][j], din[l][j - a[0][i]] + a[1][i]);
else {
if (din[l][j - a[0][i]] == 0 && din[l][j] == 0) {
if (a[0][i] == j)
din[1 - l][j] = a[1][i];
} else {
if (din[l][j - a[0][i]] != 0)
din[1 - l][j] = din[l][j - a[0][i]] + a[1][i];
else {
if (a[0][i] != j)
din[1 - l][j] = din[l][j];
else
din[1 - l][j] = min(din[l][j], a[1][i]);
}
}
//if (din[l][j - a[0][i]] == 0)
}
} else
din[1 - l][j] = din[l][j];
}
if (din[l][w])
printf("%d", din[l][w]);
else
printf("-1");
return 0;
}