编辑代码

#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);
    }
}