Cod sursa(job #1426831)

Utilizator tudorcomanTudor Coman tudorcoman Data 30 aprilie 2015 18:38:45
Problema Energii Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.02 kb

#include <stdio.h>
#include <string.h>

const char *FI = "energii.in";
const char *FO = "energii.out";
const int INFI = 1e9;

int E[1001], P[1001], D[20001], f[20001];

inline int MIN (int a, int b) { return (a > b) ? b : a; }
inline int MAX (int a, int b) { return (a > b) ? a : b; }

int main(int argc, const char * argv[]) {
    
    freopen (FI, "r", stdin);
    freopen (FO, "w", stdout);
    int G, W = 0;
    scanf( "%d%d", &G, &W);
    
    for (int i=1; i <= G; ++ i)
        scanf("%d%d",&E[i],&P[i]);
    
    for (int i=1; i < 20001; ++ i)
        D[i] = INFI;
    
    f[0] = 1;
   
    for (int i=1; i <= G; ++ i)
        for (int j = W; j > -1; -- j) {
            if (f[j] == 1) {
                int p = j + E[i];
                if (p > W)
                    D[W] = MIN ( D[W], D[j] + P[i]);
                else {
                    D[p] = MIN (D[p], D[j] + P[i]);
                    f[p] = 1;
                }
            }
        }
    
    if (!f[W])
        printf("-1\n");
    printf("%d\n",D[W]);
    
    return 0;
}