Cod sursa(job #1477074)

Utilizator BodStfBodoarca Stefan BodStf Data 25 august 2015 15:22:58
Problema Energii Scor 5
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.91 kb
#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;
}