Cod sursa(job #402826)

Utilizator Cristi09Cristi Cristi09 Data 24 februarie 2010 10:35:22
Problema Energii Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.02 kb
#include<stdio.h>
int g,w,v[2][1001];//v[0][..]energie,v[1][..]costul
struct mat
{
	int c,e;
}best[1001][1001];
void read()
{
	FILE*f=fopen("energii.in","r");
	fscanf(f,"%d%d",&g,&w);
	int i;
	for(i=0;i<g;++i)
		fscanf(f,"%d%d",&v[0][i],&v[1][i]);
	fclose(f);
}
int dinamic()
{
	int i,min=99999,j,ok;
	
	for(i=0;i<g;++i)
	{
		best[i][i].e=v[0][i];
		best[i][i].c=v[1][i];
		if(best[i][i].e==w&&best[i][i].c<min)
			min=best[i][i].c;
		for(j=0;j<g;++j)
		{
			if(i<=j)continue;
			ok=0;
			if(v[0][j]+v[0][i]<=w)
			{	ok=1;
				best[i][j].e=v[0][j]+v[0][i];
				best[i][j].c=v[1][j]+v[1][i];
				if(best[i][j].c<min&&best[i][j].e==w)min=best[i][j].c;
			}
			if(i)
			{
				if(best[i-1][j].e+v[0][i]<=w)
				{
					best[i][j].e=best[i-1][j].e+v[0][i];
					best[i][j].c=best[i-1][j].c+v[1][i];
					if(best[i][j].c<min&&best[i][j].e==w)min=best[i][j].c;
				}
			}
		}
	}
	return min;
}
int main()
{
	read();
	FILE*g=fopen("energii.out","w");
	fprintf(g,"%d",dinamic());
	fclose(g);
	return 0;
}