/*
* test.cpp
*
* Created on: 2010-4-17
* Author: Sarah
*/
#include <iostream>
using namespace std;
void back_track(int c[],int x[],int size,int i,int rest);
int bestw = 0;
int maxc = 152;
int cw = 0;
int bestx[8];
int main()
{
int c[8] = {0,90,80,40,30,20,12,10};
int x[8];
int rest = 0;
for (int m = 0; m < 8; m++)
{
x[m] = 0;
rest = rest + c[m];
bestx[m] = 0;
}
back_track(c,x,7,1,rest);
for (int n = 0; n < 8; n++)
{
if(bestx[n] == 1)
cout<<c[n]<<" ";
}
cout<<endl;
cout<<bestw<<endl;
return 0;
}
void back_track(int c[],int x[],int size,int i,int rest)
{
if(i > size)
{
// cout<<cw<<endl;
if(cw > bestw)
{
for (int n = 0; n <= size; n++)
{
bestx[n] = x[n];
}
bestw = cw;
}
return;
}
else
{
rest = rest - c[i];
if((cw+c[i]) < maxc)
{
x[i] = 1;
cw = cw + c[i];
back_track(c,x,size,i+1,rest);
cw = cw - c[i];
}
if((cw+rest) > bestw )
{
x[i] = 0;
back_track(c,x,size,i+1,rest);
}
rest = rest + c[i];
}
}