Cod sursa(job #219119)

Utilizator crisy_girlpop cristina crisy_girl Data 5 noiembrie 2008 18:12:36
Problema Energii Scor 55
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.72 kb
#include<stdio.h>
int W,G,A[1001][2],D[2][5001],X,M;

int min(int a1,int a2,int k)
{
    if (a1<0) if (a2-A[k][2]<0) return -1;
    else return a2;
    else if (a1<a2) return a1; else return a2;
}

int main()
{
    freopen("energii.in","r",stdin);
    freopen("energii.out","w",stdout);
    scanf("%d %d", &G, &W);
    for (int i=1; i<=G; ++i)
        scanf("%d %d", &A[i][1] ,&A[i][2]);
    for (int i=1; i<=W; ++i)
        if (A[1][1]>=i) 
        D[X][i]=A[1][2];
        else D[X][i]=-1;
    for (int i=2; i<=G; ++i)
    {
        for (int j=1;j<=W;++j)
        {
            M=min(D[X][j],D[X][j-A[i][1]]+A[i][2],i); 
            D[!X][j]=M;
        }
        X=!X;
    }
     printf("%d", D[X][W]);
}