Cod sursa(job #1483134)

Utilizator BodStfBodoarca Stefan BodStf Data 8 septembrie 2015 19:23:30
Problema Problema rucsacului Scor 10
Compilator cpp Status done
Runda Arhiva educationala Marime 0.85 kb
#include<stdio.h>
#include<stdlib.h>

#define MAX 5000
int N,G,profmax=-int(2e9);
struct ob
{
	int w,p;
};

ob v[MAX],sol[MAX];
int poz[MAX];

void incarca()
{
	FILE* input=fopen("rucsac.in","r");
	fscanf(input,"%d %d",&N,&G);
	for(int i=0;i<N;i++)
		fscanf(input,"%d %d",&v[i].w,&v[i].p);
	fclose(input);
}

int greutate(int i)
{
	int s=0;
	for(int k=0;k<i;k++)
		s+=sol[k].w;
	return s;
}

int P(int i)
{
	int s=0;
	for(int k=0;k<i;k++)
		s+=sol[k].p;
	return s;
}

void bt(int i)
{
	if(i && greutate(i)<=G)
	{
		if(profmax<P(i))
			profmax=P(i);
	}
	int start=0;
	if(i)
		start=poz[i-1]+1;
	for(int p=start;p<N;p++)
	{
		sol[i].p=v[p].p;
		sol[i].w=v[p].w;
		poz[i]=p;
		bt(i+1);
	}
}

int main()
{
	incarca();
	bt(0);
	FILE* out=fopen("rucsac.out","w");
	fprintf(out,"%d\n",profmax);
	return 0;
}