Knapsack problem (c++)

Created: 2008-11-06 - 11:58


#include <cstdio>
 
using namespace std;
 
int main(void){
int p;
scanf("%d\n",&p);
int i=0;
while(i<p){
	int n,c;
	scanf("%d %d",&n,&c);
	int j=0;
	int ceny[n];
	int hmotnosti[n];
	while(j<n){
		scanf("%d",&hmotnosti[j]);
		j++;	
	}
	j=0;
	while(j<n){
		scanf("%d",&ceny[j]);
		j++;	
	}
 
	int max=0;
	for(int mask=0;mask<(1<<n);mask++){	
		int cen=0;
		int sum=0;
		for(int k=0;k<n;k++){
			if(mask&(1<<k)){	
				sum+=hmotnosti[k];
				if(sum<=c){
					cen+=ceny[k];
				}
				else{
					sum=0;
					cen=0;
					break;
				}
			}
		}
		if(cen>max)
			max=cen;
	}
	printf("%d\n",max);
i++;
}
return 0;
}