Cod sursa(job #317039)

Utilizator ZillaMathe Bogdan Zilla Data 22 mai 2009 10:38:43
Problema Energii Scor 10
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.98 kb
#include <stdio.h>

#define Nmax 1024
#define Wmax 550000

int n,w,v[Nmax],c[Nmax],b[2][Wmax],max=4000000,cnt;

int main()
{
    int i,j;
    
    freopen("energii.in","r",stdin);
    freopen("energii.out","w",stdout);
    
    scanf("%d%d",&n,&w);
    
    for(i=1;i<=n;++i)
        {
            scanf("%d%d",&v[i],&c[i]);
            if(v[i]>=w)
                {
                    if(c[i]<max)
                        max=c[i];
					--i;
					--n;
				}
		}
	b[0][0]=1;
	b[1][0]=0;
    for(i=1;i<=n;++i)
        {
            for(j=w-1;j>=0;--j)
				if(b[0][v[i]+b[0][j]]==0 && b[0][j]==1)
					{
						b[0][v[i]+j]=1;
						b[1][v[i]+j]=b[1][j]+c[i];
					}
				else
					if(b[1][v[i]+j]<b[1][j]+c[i] && b[0][j]==1)
						b[1][v[i]+j]=b[1][j]+c[i];
        }
    for(i=w;i<=10001;++i)
		if(b[1][i]<max && b[0][i]==1)
            max=b[1][i];
    if(max==4000000)
        printf("-1");
    else  
    printf("%d",max);          
    return 0;    
}