Cod sursa(job #411694)

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