Pagini recente » Cod sursa (job #1001547) | Cod sursa (job #1147503) | Cod sursa (job #974153) | Cod sursa (job #2428168) | Cod sursa (job #1483134)
#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;
}