Pagini recente » Cod sursa (job #1078059) | Cod sursa (job #1739286) | Cod sursa (job #1789164) | Cod sursa (job #2119300) | Cod sursa (job #411389)
Cod sursa(job #411389)
#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;
}