las和回溯结合的解01背包的代码
2013-06-29 20:02
113 查看
#include<iostream> #include<fstream> #include<vector> #include<string> #include<bitset> #include<algorithm> #include<ctime> using namespace std; const int N=50;//the number of the item const int max_w=1000;//max weight int best_solution=0; bitset<N> b; vector<int> v,v_best; vector<int> w; int lcw=0; // be used to translate the weight from las to trace int lcv=0; int final_v=0; void las_packing(int); void trace_back(int,int,int); int main(){ v.reserve(N); v_best.reserve(N); w.reserve(N); cout<<"input the weight and value of each item"; freopen("test.txt","r",stdin); for(int i=0;i<N;i++){ int x=0; int y=0; cin>>x; v.push_back(x); cin>>y; w.push_back(y); } cout<<"done"<<endl; for(int i=0;i<10;i++){ las_packing(30); trace_back(31,lcw,lcv); if(best_solution>final_v) final_v = best_solution; lcw=0; lcv=0; } cout<<final_v<<endl; } void trace_back(int i,int cw, int cv){ int j; if(i>=N){ if(cv>best_solution) { best_solution=cv; v_best.assign(v.begin(),v.end()); } } else{ for(j=0;j<=1;j++){ b.flip(i); if( cw + (int)b[i] * w[i] <= max_w){ cw += w[i]*(int)b[i]; cv += v[i]*(int)b[i]; trace_back(i+1,cv,cw); cw -= w[i]*(int)b[i]; cv -= v[i]*(int)b[i]; } } } } void las_packing(int n){ srand(unsigned(time(0))); for(int i=0;i<n;i++){ if(rand()/(RAND_MAX+1.0)>0.5) b.flip(i); if(lcw+(int)b[i]*w[i]<=max_w){ lcw += w[i]*(int)b[i]; lcv += v[i]*(int)b[i]; } else b.flip(i); } }测试数据 1 19 12
2 53 61
3 61 63
4 74 78
5 98 49
6 70 46
7 15 44
8 59 36
9 64 37
10 29 66
11 98 43
12 79 16
13 74 14
14 85 73
15 52 72
16 70 72
17 84 83
18 91 15
19 84 83
20 75 65
21 78 21
22 72 49
23 5 36
24 46 20
25 26 22
26 95 80
27 38 94
28 79 3
29 28 73
30 92 1
31 12 91
32 37 62
33 37 8
34 58 58
35 94 79
36 44 67
37 25 53
38 3 8
39 12 85
40 67 82
41 2 70
42 98 43
43 12 22
44 2 53
45 34 22
46 68 14
47 68 41
48 81 41
49 92 77
50 16 75
相关文章推荐
- python结合shell查询google关键词排名的实现代码
- Spring与Junit结合使用的代码
- 稀疏表示(二)——KSVD算法详解(结合代码和算法思路)
- JenKins结合cppcheck及cpplint进行代码风格及静态代码检测
- 深度学习笔记——Word2vec和Doc2vec原理理解并结合代码分析
- javascript结合Ajax制作的可编辑表格代码
- StoryBoard和代码结合 按比例快速兼容iPhone6/6 Plus教程
- 各式各样的导航条效果css3结合jquery代码实现
- 结合代码分析装饰者模式和代理模式的区别
- JS与HTML结合使用marquee标签实现无缝滚动效果代码
- 通过圆的颜色并结合霍夫变换检测目标圆的OpenCV代码
- AJAX结合PHP代码实现登录
- Control Study->AdRotator广告控件显示自定义配置文件中广告以及与DataGrid控件结合使用显示图片(示例代码下载)
- 在windows和Linux上安装ImageMagick与jmagick,Maven配置、Java图片压缩代码(整理网上、结合自己情况、编写出来的新安装方式)
- unity3d结合轮廓显示,实现完整的框选目标(附Demo代码)
- yii框架redis结合php实现秒杀效果(实例代码)
- 回溯算法-01背包问题