Cod sursa(job #221060)

Utilizator Alexa_ioana_14Antoche Ioana Alexandra Alexa_ioana_14 Data 14 noiembrie 2008 13:27:18
Problema Energii Scor 5
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.25 kb
#include<stdio.h>
#define N 1006
#define M 5006
struct energii
{
        int energ,cost;
};
int m[M];
bool m1[M];
int g,w,s,s1,min=M;
energii v[N];
int calcul()
{
        int i,j;
        m[0]=1;
        m1[0]=true;
        for (i=1; i<=g; ++i)
        {
                int s2=0;
                for (j=s; j>=0; --j)
                        if (m[j])
                        {
                               m[j+v[i].energ]+=v[i].cost;
                               m1[j+v[i].energ]=true;
                               if ((min>m[j+v[i].energ])&&(j+v[i].energ>=w))
                                       min=m[j+v[i].energ];
                        }
        }
        for (j=s; j>=0; --j)
        if (m[j]==min)
                return min;
        return 0;
}
void citire()
{
        scanf("%d%d",&g,&w);
        for (int i=1; i<=g; ++i)
        {
                scanf("%d%d",&v[i].energ,&v[i].cost);
                s+=v[i].energ;
                s1+=v[i].cost;
        }
        if (s<w) printf("-1\n");
        else
        if (s==w) printf("%d \n",s1);
        else
        printf("%d\n",calcul());
}
int main()
{
        freopen("energii.in","r",stdin);
        freopen("energii.out","w",stdout);
        citire();
}