Cod sursa(job #318346)

Utilizator ZillaMathe Bogdan Zilla Data 28 mai 2009 08:40:41
Problema Energii Scor 5
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.95 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]+b[0][j]]=1;
						b[1][v[i]+b[0][j]]=b[1][j]+c[i];
					}
				else
					if(b[1][v[i]+b[0][j]]<b[1][j]+c[i] && b[0][j]==1)
						b[1][v[i]+b[0][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;
}