Cod sursa(job #371377)

Utilizator Bogdan_CCebere Bogdan Bogdan_C Data 5 decembrie 2009 02:30:08
Problema Energii Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.77 kb
#include<cstdio>
#define GMAX 1001
#define WMAX 5001<<1
#define MIN 1<<30
#define FIN "energii.in"
#define FOUT "energii.out"
using namespace std;
int W,G[WMAX],C[WMAX],REZ[WMAX],u[WMAX],i,j,n,total;
int main()
    {freopen(FIN,"r",stdin);
    freopen(FOUT,"w",stdout);
    scanf("%d %d",&n,&W);
    for(i=1;i<=n;i++) {scanf("%d %d",&G[i],&C[i]);}
    for(i=0;i<=W;i++) REZ[i]=MIN;
    REZ[0]=0;
    u[0]=1;
    for(i=1;i<=n;i++)
        for(j=W;j>=0;j--)
                  { if(u[j] && REZ[j]+C[i]<REZ[j+G[i]]) {u[j+G[i]]=1;REZ[j+G[i]]=REZ[j]+C[i];}
                   if(j+G[i]>total) total=j+G[i];}
    int minim=MIN;
    for(i=total;i>=W;i--)
    if(REZ[i]<minim) minim=REZ[i];
    if(minim==MIN) printf("-1\n");
    else printf("%d\n",minim);   
return 0;}