Cod sursa(job #652745)

Utilizator luckyme91wiz kid luckyme91 Data 26 decembrie 2011 02:51:46
Problema Energii Scor 100
Compilator c Status done
Runda Arhiva de probleme Marime 1.95 kb
/* 
 * 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;
}