0-1背包优化动态规划算法之跳跃点法
来源:互联网 发布:mac子弹头专柜价格 编辑:程序博客网 时间:2024/06/07 03:49
// 动态规划 背包问题 跳跃点优化#include <iostream>using namespace std;template<class Type>void Traceback(int n,Type w[],Type v[],Type **p,int *head,int x[]){ Type j = p[head[0]-1][0],m=p[head[0]-1][1]; for(int i=1; i<=n; i++) { x[i]=0; for(int k=head[i+1]; k<=head[i]-1; k++) { if(p[k][0]+w[i]==j && p[k][1]+v[i]==m) { x[i]=1; j=p[k][0]; m=p[k][1]; break; } } }}template<class Type>int Knapsack(int n,Type c,Type v[],Type w[],int **p,int x[]){ int *head = new int[n+2]; head[n+1]=0; p[0][0]=0; p[0][1]=0; int left = 0,right = 0,next = 1; head[n]=1; for(int i=n; i>=1; i--) { int k = left; for(int j=left; j<=right; j++) { if(p[j][0]+w[i]>c) break; Type y = p[j][0] + w[i],m = p[j][1] + v[i]; while(k<=right && p[k][0]<y) { p[next][0]=p[k][0]; p[next++][1]=p[k++][1]; } if(k<=right && p[k][0]==y) { if(m<p[k][1]) { m=p[k][1]; } k++; } if(m>p[next-1][1]) { p[next][0]=y; p[next++][1]=m; } while(k<=right && p[k][1]<=p[next-1][1]) { k++; } } while(k<=right) { p[next][0]=p[k][0]; p[next++][1]=p[k++][1]; } left = right + 1; right = next - 1; head[i-1] = next; } Traceback(n,w,v,p,head,x); return p[next-1][1];}int main(){ int c; cout<<"请输入待装物品的数量: "<<endl; int N; cin>>N; int w[N+1]; int v[N+1]; cout<<"请输入各个物品的重量及其对应价值:"<<endl; for(int i=1; i<=N; i++) { cin>>w[i]; cin>>v[i]; } int x[N+1]; cout<<"请输入背包最大载重量:"<<endl; cin>>c; int **p = new int *[50]; for(int i=0; i<50; i++) { p[i] = new int[2]; } cout<<"背包能装的最大价值为:"<<Knapsack(N,c,v,w,p,x)<<endl; cout<<"背包装下的物品编号为:"<<endl; for(int i=1; i<=N; i++) { if(x[i]==1) { cout<<i<<" "; } } cout<<endl; for(int i=0; i<50; i++) { delete p[i]; } delete[] p; return 0;}
3 1
- 0-1背包优化动态规划算法之跳跃点法
- 算法之动态规划--0、1背包
- [算法]动态规划之0-1背包
- 算法 -- 0-1背包问题之动态规划
- 【算法】——动态规划之0-1背包问题
- C++动态规划算法之0-1背包问题
- [算法]动态规划 多重背包 二进制优化
- 0-1背包算法(动态规划)
- 0-1背包动态规划一般算法
- 0-1背包问题动态规划算法
- [算法]动态规划 0-1背包 完全背包
- 动态规划之0-1背包详解
- 动态规划之0-1背包详解
- 动态规划之0-1背包问题
- 动态规划之0-1背包问题
- 动态规划之0-1背包问题
- 动态规划 之 0-1背包问题
- 动态规划之0-1背包问题
- 键盘按键处理过程
- Android studio 导出,导入 arr包
- broken dependencies in the rawhide tree
- 爬虫-百度贴吧帖子
- vector push_back可能出错
- 0-1背包优化动态规划算法之跳跃点法
- Android 根据包名,获取应用程序的签名
- 算法导论复习(5) 线性时间排序
- 自定义滚动轴样式
- sql中的数据表三种连接方式
- Tomcat的信息国际化之路
- 前端项目实战1:酒仙网首页
- 给自己的mongodb设置密码吧
- angularJS基本表格