回溯法解决0-1背包问题

来源:互联网 发布:淘宝商业的竞争环境 编辑:程序博客网 时间:2024/05/01 23:33
#include<iostream>#include<cstring>using namespace std;int c,n,bestw=0,cw=0,cp=0,r=0;int p[100],w[100],x[100];void BackTrack(int i){    if(i>n){//完成每一次的探索     if(cp>bestw){bestw=cp;}return;}   //先进行左侧判断        if(cw+w[i]<=c){           r-=w[i];           x[i]=1;           cw+=w[i];           cp+=p[i];           BackTrack(i+1);           r+=w[i];           cw-=w[i];           cp-=p[i];        }        BackTrack(i+1);    }int main(void){int i;    cin>>n;    cin>>c;    for(i=1;i<=n;i++) cin>>p[i];    for(i=1;i<=n;i++) {cin>>w[i];r+=w[i];}    BackTrack(1);    cout<<bestw<<endl;}
第一次写的,比较粗糙,时间复杂度上也没有很好的优化。
0 0
原创粉丝点击