#include<iostream>
using namespace std;
int max_weight=10;
int max_value=0;
int time_weight=0;
int time_value=0;
int put[5]={};
int i=0;
int futurn_backtrack(int i,int object[][5]);
int backtrack(int i,int object[][5])
{
if(i>5)
{
max_value = time_value;
}
if(time_value+object[0][i]<=max_weight)
{
time_weight+=object[0][i];
time_value+=object[1][i];
put[i]=1;
backtrack(i+1,object);
time_weight-=object[0][i];
time_value-=object[1][i];
}
if(futurn_backtrack(i+1,object)>max_value)
{
put[i]=0;
backtrack(i+1,object);
}
}
int futurn_backtrack(int i,int object[][5])
{
double leftw= max_weight-time_weight;
double b = time_value;
while(i<=5 && object[0][i]<=leftw)
{
leftw-=object[0][i];
b+=object[1][i];
i++;
}
if(i<=5)
b+=object[1][i]/object[0][i]*leftw;
return b;
}
int main()
{
int object[2][5]={{6,5,4,2,1},{5,3,5,3,2}};
backtrack(0,object);
printf("最优价值为:%d\n",max_weight);
printf("需要装入的物品编号是:");
for(i=1;i<=5;i++)
{
if(put[i]==1)
printf("%d ",i);
}
}