Cod sursa(job #1052088)

Utilizator caliuxSegarceanu Calin caliux Data 10 decembrie 2013 20:57:53
Problema Energii Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.19 kb
#include <stdio.h>
#include <algorithm>
#define NMAX 10000000
using namespace std;

int G, W, i, j, smax;
int E[NMAX], C[NMAX], v[1001][5001];
int minimum = 999999999;

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 <= W; i++)
        v[0][i] = minimum;
    for(i = 0; i <= G; i++)
        v[i][0] = minimum;

    for(i = 1; i <= G; i++){
        for(j = 1; j <= W; j++){
            if(E[i] >= j){
                if(v[i - 1][j] > C[i]){
                    v[i][j] = C[i];
                }else{
                    v[i][j] = v[i - 1][j];
                }
            }
            else{
                if(v[i - 1][j] < v[i - 1][j - E[i]] + C[i])
                    v[i][j] = v[i - 1][j];
                else
                    v[i][j] = v[i - 1][j - E[i]] + C[i];
            }
        }

    }
    if(smax < W){
        printf("-1\n");
    }else{
        printf("%d\n", v[G][W]);
    }
}