BackTrack ---装载问题

/*

 * 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];

   }

 

 

}

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值