Cod sursa(job #1337286)

Utilizator gapdanPopescu George gapdan Data 8 februarie 2015 20:19:18
Problema Energii Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.86 kb
#include <cstdio>
#define min(a, b) ( a < b ? a : b)
#define smax 20000
#define NMAX 5001
#define INF 1<<30

using namespace std;
int n, lim, Min;
int e[NMAX], c[NMAX], v[smax+2];

void citire()
{
    freopen("energii.in", "r" , stdin);
    scanf("%d%d", &n, &lim);
    for(int i = 1; i <= n; ++i){
        scanf("%d %d",&e[i], &c[i]);
    }
    for(int i = 1; i <= smax; ++i) v[i]=INF;
}

void solve()
{

    for(int i = 1; i <= n; ++i)
        for(int j = lim; j >= 0; --j){

            v[j + e[i]] = min(v[j + e[i]], v[j] + c[i]);
        }

}

void afis()
{
    freopen("energii.out", "w" ,stdout);
    Min=INF;
    for(int i = smax; i >= lim; --i)
        if( v[i] < Min) Min=v[i];
    if(Min == INF) printf("%d\n",-1);
        else printf("%d\n",Min);
}
int main()
{
    citire();
    solve();
    afis();
    return 0;
}