Cod sursa(job #744896)

Utilizator MagnvsDaniel Constantin Anghel Magnvs Data 10 mai 2012 00:08:48
Problema Energii Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.78 kb
#include <cassert>
#include <cstdio>

const int smax=5000, nbmax=10000, inf=1<<30;

int d[smax+nbmax+1];

int main(){
    int n, s, sol;

    assert(freopen("energii.in", "r", stdin));
    assert(scanf(" %d %d ", &n, &s));
    
    for (int i=1; i<=s+nbmax; ++i){
        d[i]=inf;
    }
    
    for (; n; --n){
        int x, y;

        assert(scanf(" %d %d ", &x, &y));

        for (int i=s+nbmax-x; i>=0; --i){
            if (d[i]+y<d[i+x]){
                d[i+x]=d[i]+y;
            }
        }
    }
    fclose(stdin);

    sol=inf;
    for (int i=s; i<=s+nbmax; ++i){
        if (d[i]<sol){
            sol=d[i];
        }
    }

    if (sol==inf){
        sol=-1;
    }

    assert(freopen("energii.out", "w", stdout));
    printf("%d\n", sol);
    fclose(stdout);

    return 0;
}