Pagini recente » Cod sursa (job #2314671) | oni_2012_11-12_ziua_1 | tema | Istoria paginii runda/simulare_oji_viii/clasament | Cod sursa (job #652745)
Cod sursa(job #652745)
/*
* File: main.c
* Author: mihai
*
* Created on December 25, 2011, 12:57 AM
*/
#include <stdio.h>
#include <stdlib.h>
#include <string.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, k;
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 < w + 2; i++)
din[0][i] = 1000000000;
din[0][0] = 0;
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] = min (din[l][j], a[1][i]);
}
}
if (din[l][w] < 1000000000)
printf("%d", din[l][w]);
else
printf("-1");
return 0;
}