Cod sursa(job #1866869)

Utilizator GeorgianBaditaBadita Marin-Georgian GeorgianBadita Data 3 februarie 2017 16:33:50
Problema Energii Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.95 kb
#include <cstdio>
#define WMAX 10001
#define NMAX 5001
#define MIN(A, B) A <= B? A : B
#define INF 1e9
using namespace std;

FILE *f = freopen("energii.in", "r", stdin);
FILE *g = freopen("energii.out", "w", stdout);

int dp[NMAX][WMAX];
int N, GMAX, C[NMAX], G[NMAX];

void read() {
    scanf("%d%d", &N, &GMAX);
    for(int i = 1; i<=N; i++)
        scanf("%d%d", &G[i], &C[i]);
}
void dinamic() {
    for(int i = 0; i<=N; i++)
        for(int CW = 0; CW <= GMAX; CW ++)
            dp[i][CW] = INF;
    for(int i = 1; i<=N; i++)
        for(int CW = 0; CW <= GMAX; CW ++) {
            if(G[i] < CW)
                dp[i][CW] = MIN(dp[i - 1][CW], dp[i - 1][CW - G[i]] + C[i]);
            else dp[i][CW] = MIN(dp[i - 1][CW], C[i]);
        }
       //printf("%d", dp[N][GMAX]);
}
int main() {
    read();
    dinamic();
    if(dp[N][GMAX] == INF)
        printf("%d", -1);
    else printf("%d", dp[N][GMAX]);

    return 0;
}