Cod sursa(job #1068381)

Utilizator gabrielinelusGabriel-Robert Inelus gabrielinelus Data 28 decembrie 2013 12:12:33
Problema Energii Scor 90
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.04 kb
#include <cstdio>
#include <memory.h>
#include <algorithm>

#define Gmax 5005
#define INF 0x3f3f3f3f

using namespace std;
int N,CP,DP[2][Gmax];

void read()
{
    scanf("%d%d",&N,&CP);
    memset(DP,INF,sizeof(DP));
    DP[0][0] = DP[1][0] = 0;
}

void dynamic()
{
    int E,Cst,mn = INF;
    int l = 1;

    for(int i = 1; i <= N; ++i)
    {
        scanf("%d%d",&E, &Cst);
        for(int j = 0; j <= CP; ++j)
            if(j + E <= CP)
            {
                DP[l][j] = min( DP[l^1][j] , DP[l][j]);

                if(DP[l][j + E] > DP[l^1][j] + Cst)
                    DP[l][j + E] = DP[l^1][j] + Cst;
            }
            else
                if(DP[l^1][j] + Cst < mn)
                    mn =  DP[l^1][j] + Cst;
        l ^= 1;

    }
    int ans = min ( DP[l^1][CP], mn);
    if(ans != INF)
        printf("%d\n",ans);
    else
        printf("-1\n");
}

int main()
{
    freopen("energii.in","r",stdin);
    freopen("energii.out","w",stdout);

    read();
    dynamic();

    return 0;
}