Cod sursa(job #220699)

Utilizator SheepBOYFelix Liviu SheepBOY Data 12 noiembrie 2008 10:00:45
Problema Energii Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.95 kb
#include<stdio.h>
int v[1000001],vf[1001];
struct G_C{
int e,c;
};
int g,w;
int sum;
G_C energ[1001];
void reorder()
{
	int i,j,max_reg=0,min_reg;
    for(int i=0;i<g;i++)
	{
	for(j=0;j<=sum;j++)
	{
		
			if(v[j])
				if(energ[i].e<j||v[j-energ[i].e]!=v[j]-energ[i].c||!vf[v[j]-energ[i].c])
					if(v[j+energ[i].e]>v[j]+energ[i].c||!v[j+energ[i].e])
					{
						v[j+energ[i].e]=v[j]+energ[i].c;
						max_reg=(max_reg<v[j+energ[i].e])?v[j+energ[i].e]:max_reg;
					}						
	}
	}
	for(i=w;i<=max_reg;i++)
		if(v[i])
		{
			min=(!min)?v[i]:min;
			min=(min>v[i])?v[i]:min;
		}
	printf("%d",min);
}
int main()
{
	freopen("energii.in","r",stdin);
	freopen("energii.out","w",stdout);
	scanf("%d%d",&g,&w);	
	int i=0;
	for(i=0;i<g;i++)
	{
		scanf("%d%d",&energ[i].e,&energ[i].c);
		if(sum<energ[i].e)
			sum=energ[i].e;
		vf[energ[i].c]=1;
		if(v[energ[i].e]>energ[i].c||!v[energ[i].e])
			v[energ[i].e]=energ[i].c;


	}
	reorder();
	return 0;
}