Cod sursa(job #411379)

Utilizator Cristi09Cristi Cristi09 Data 4 martie 2010 21:02:54
Problema Ghiozdan Scor 10
Compilator cpp Status done
Runda Lista lui wefgef Marime 0.99 kb
#include<stdio.h>
#define MAX 999999999
int n,v[20001],g,car[1201],traseu[20001];
struct mat
{
	int val,vec[201];
}sol[75001];
void read()
{
	FILE*f=fopen("ghiozdan.in","r");
	fscanf(f,"%d%d",&n,&g);
	int i;
	for(i=1;i<=n;++i)
	{
		fscanf(f,"%d",&v[i]);
		++car[v[i]];
	}
	fclose(f);
}
int main()
{
	read();
	int i,aux,j;
	for(i=1;i<=g;++i)
	{
		sol[i].val=MAX;
		if(i==g)
			printf("DA");
		for(j=1;j<=n;++j)
			if(v[j]<=i&&sol[i-v[j]].vec[v[j]]+1<=car[v[j]])
			{
				if(v[j]+sol[i-v[j]].val<sol[i].val||v[j]+sol[i-v[j]].val<=g)
				{sol[i]=sol[i-v[j]];
				sol[i].val+=v[j];
				++sol[i].vec[v[j]];}
			}
		
		if(sol[i].val==MAX)
		{
			sol[i]=sol[i-1];
		}
	}
	FILE*h=fopen("ghiozdan.out","w");
	fprintf(h,"%d ",sol[g].val);
	int var;
	for(i=1,j=0,aux=0;i<=200;++i)
	{
		var=sol[g].vec[i];
		aux+=var;
		for(;var;--var,++j)
			traseu[j]=i;
	}
	fprintf(h,"%d\n",aux);
	for(var=0;var<j;++var)
		fprintf(h,"%d\n",traseu[var]);
	fclose(h);
	return 0;
}