Cod sursa(job #1429310)

Utilizator VAIonescuIonescu Vlad-Andrei VAIonescu Data 5 mai 2015 23:49:30
Problema Energii Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.03 kb
/*
 * main.cpp
 *
 *  Created on: May 5, 2015
 *      Author: Vlad Nazdravan
 */

#include <cstdio>
#define max(a,b) a>b?(a):(b)
#define min(a,b) a<b?(a):(b)
using namespace std;

const int gmax = 10000;
int d[gmax];

int main() {
    freopen("energii.in", "r", stdin);
    freopen("energii.out", "w", stdout);
    int n, gm, dr = 0, gi, pi;
    scanf("%d%d", &n, &gm);
    for (register int i = 1; i <= gmax; ++i) {
        d[i] = -1;
    }
    for (register int i = 1; i <= n; ++i) {
        scanf("%d%d", &pi, &gi);
        for (register int j = dr; j >= 0; --j) {
            if (d[j] != -1 && j + gi <= gmax && d[j + gi] < d[j] + pi) {
                d[j + gi] = d[j] + pi;
                dr = max(dr, j + gi);
            }
        }
    }
    int myn = (1ll << 31) - 1;
    for (register int i = 1; i <= gmax; ++i) {
        if (d[i] >= gm) {
            myn = min(myn, i);
        }
    }
    if (myn==((1ll<<31)-1)){
        printf("-1");
        return 0;
    }
    printf("%d", myn);
    return 0;
}