Cod sursa(job #498855)

Utilizator bugyBogdan Vlad bugy Data 7 noiembrie 2010 14:44:22
Problema Energii Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.12 kb
#include<stdio.h>
using namespace std;
#define NMax 1001
#define MaxG 5001

int n,GMax,c[NMax],Uz[NMax][NMax],g[NMax],CMax[NMax];

void citire();
void rezolvare();
void afisare();

int main()
{
citire();
rezolvare();
afisare();
return 0;
}

void citire()
{
FILE *f=fopen("energii.in","r");
int i;
fscanf(f,"%d %d",&n,&GMax);
for(i=1;i<=n;i++) fscanf(f,"%d",&g[i]);
for(i=1;i<=n;i++) fscanf(f,"%d",&c[i]);

fclose(f);
}


void rezolvare()
{
int S,k,i;
for(S=1; S<=GMax;S++) 
	CMax[S]=-1;

for(S=1;S<=GMax;S++)
	for(i=1;i<=n;i++)
		if(S-g[i]>=0)
		if(g[i]<=S&&CMax[S-g[i]]!=-1&&!Uz[S-g[i]][i])
			if(CMax[S]<c[i]+CMax[S-g[i]])
			{
			CMax[S]=c[i]+CMax[S-g[i]];
			for(k=1;k<=n;k++)
				Uz[S][k]=Uz[S-g[i]][k];
			Uz[S][i]=1;
			}
	
}



void afisare()
{	int i,min;
	FILE *g=fopen("energii.out","w");
	if(CMax[GMax]==-1)
		fprintf(g,"-1\n");
	else
	{	min=MaxG;
		for(i=1; i<=n; i++)
			if(CMax[i]<min&&CMax[i]!=-1)
				min=CMax[i];
		fprintf(g,"%d\n",min);
		/*for(int k=1; k<=n; k++)
			if(Uz[GMax][k])
				fprintf(g,"%d ",k);
			fprintf(g,"\n");*/
	}
fclose(g);
}