Pagini recente » Rating alexandra popoiu (alexandra_popoiu) | Cod sursa (job #2487617) | Cod sursa (job #2681468) | Cod sursa (job #1474972) | Cod sursa (job #1477074)
#include<stdio.h>
#include<malloc.h>
#include<stdlib.h>
int g,w;
struct ob
{
int e,c;
};
int min=1000000,sum,C;
int* poz;
void bt(int i,ob* sol,ob* v)
{
if(i)
{
for(int k=0;k<i;k++)
{
sum+=sol[k].e;
C+=sol[k].c;
}
if(C>=w && min>sum)
min=sum;
sum=0;
C=0;
}
int start=0;
if(i)
start=poz[i-1]+1;
for(int p=start;p<g;p++)
{
sol[i].c=v[p].c;
sol[i].e=v[p].e;
poz[i]=p;
bt(i+1,sol,v);
}
}
int main()
{
FILE* f1,*f2;
f1=fopen("energii.in","r");
f2=fopen("energii.out","w");
fscanf(f1,"%d %d",&g,&w);
ob* v=(ob*)malloc(g*sizeof(ob));
ob* sol=(ob*)malloc(g*sizeof(ob));
poz=(int*)malloc(g*sizeof(int));
for(int i=0;i<g;i++)
fscanf(f1,"%d %d",&v[i].c,&v[i].e);
bt(0,sol,v);
if(min!=1000000)
fprintf(f2,"%d\n",min);
else fprintf(f2,"-1\n");
free(v);
free(sol);
free(poz);
fclose(f1);
fclose(f2);
return 0;
}