Cod sursa(job #338581)

Utilizator PavelRazvanPavel Razvan PavelRazvan Data 6 august 2009 11:22:20
Problema Energii Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.19 kb
#include<stdio.h>
#include<string.h>
#define DIM 1001
struct vector
{
    int eg,cg;
} v[DIM];
int g,w,a[DIM][5*DIM];
void read ()
{
    int i;
    scanf("%d%d",&g,&w);
    for(i=1;i<=g;++i)
        scanf("%d%d",&v[i].eg,&v[i].cg);
}
int min (int x,int y)
{
    if(x<y)
        return x;
    return y;
}
void solve ()
{
    int i,j;
    for(i=1;i<=v[1].eg;++i)
        a[1][i]=v[1].cg;
    for(i=2;i<=g;++i)
        a[i][1]=min(a[i-1][1],v[i].cg);
    for(i=2;i<=g;++i)
        for(j=2;j<=w;++j)
            if(j>v[i].eg)
            {
                if(a[i-1][j]!=-1 && a[i-1][j-v[i].eg]!=-1)
                    a[i][j]=min(a[i-1][j],a[i-1][j-v[i].eg]+v[i].cg);
                else if (a[i-1][j-v[i].eg]!=-1)
                    a[i][j]=a[i-1][j-v[i].eg]+v[i].cg;
            }
            else
            {
                if(a[i-1][j]!=-1)
                    a[i][j]=min(a[i-1][j],v[i].cg);
                else
                    a[i][j]=v[i].cg;
            }
    printf("%d",a[g][w]);
}
int main ()
{
    freopen("energii.in","r",stdin);
    freopen("energii.out","w",stdout);
    read ();
    memset(a,-1,sizeof(a));
    solve ();
    return 0;
}