Cod sursa(job #1866845)

Utilizator GeorgianBaditaBadita Marin-Georgian GeorgianBadita Data 3 februarie 2017 16:20:06
Problema Energii Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.97 kb
#include <cstdio>
#define WMAX 10001
#define NMAX 5001
#define MAX(A, B) A >= B? A : B
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 = 1; i<=N; i++)
        for(int CW = 0; CW <= GMAX; CW ++) {
            dp[i][CW] = dp[i - 1][CW];
            if(G[i] <= CW)
            dp[i][CW] = MAX(dp[i][CW], dp[i - 1][CW - G[i]] + C[i]);
        }
       //printf("%d", dp[N][GMAX]);
}
int main() {
    read();
    dinamic();
    /*for(int i = 1; i<=N; i++)
    {
        for(int CW = 0; CW <= GMAX; CW ++){
            printf("%d ", dp[i][CW]);
        }
        printf("\n");
    }*/
    if(dp[N][GMAX] >= GMAX)
        printf("%d", dp[N][GMAX]);
    else printf("%d", -1);
    return 0;
}