算法设计与分析实验报告—背包问题

上传人:hs****ma 文档编号:459250609 上传时间:2023-11-10 格式:DOC 页数:6 大小:122.50KB
返回 下载 相关 举报
算法设计与分析实验报告—背包问题_第1页
第1页 / 共6页
算法设计与分析实验报告—背包问题_第2页
第2页 / 共6页
算法设计与分析实验报告—背包问题_第3页
第3页 / 共6页
算法设计与分析实验报告—背包问题_第4页
第4页 / 共6页
算法设计与分析实验报告—背包问题_第5页
第5页 / 共6页
点击查看更多>>
资源描述

《算法设计与分析实验报告—背包问题》由会员分享,可在线阅读,更多相关《算法设计与分析实验报告—背包问题(6页珍藏版)》请在金锄头文库上搜索。

1、算法设计与分析实验报告0/1背包问题【问题描述】给定n种物品和一个背包。物品i的重量是w,其价值为v,背包容量为Co问应该如何选择装入背包的物品,使得装入背包中物品的总价值最大?【问题分析】0/1背包问题的可形式化描述为:给定 C0, wi 0, M 0,1 i n,要求n找出 n 元 0/1 向量(xi, X2,.,Xn),Xi 0,1 ,1 i n,使得 wx c,而且i 1nwx达到最大。因此0/1背包问题是一个特殊的整数规划问题。i 1n0 k Wn max ViXi 1rnWiXi cXi 0,1 ,1 i n【算法设计】设0/1背包问题的最优值为m( i, j ),即背包容量是j,

2、可选择物 品为i,i+1,n时0/1背包问题的最优值。由0/1背包问题的最优子结 构性质,可以建立计算 m( i, j ) 的递归式如下:Wi)+ v j Wimaxm( i+1, j ), m( i+1, j-m( i, j )=Jm(i+1,j)VnjWnm(n,j)=J00 k wn算法实现】#include #include#includeint min(int w, int c)int temp;if (w c)temp = w;elsetemp = c; return temp;/ 求最优值void knapsack(int v, int w, int* m, int c, int

3、 n)int jmax = min(wn-1, c);for (int j = 0; j = jmax; j+) mnj = 0;for (int jj = wn; jj 1; i-)/ 递归部分jmax = min(wi-1, c);for(int j = 0; j = jmax; j+) mij = mi+1j;for(int jj = wi; jj = w1)m1c = max(m1c, m2c-w1+v1);cout endl 最优值: m1c endl;coutendl;endl;cout &int traceback(int x, int w, int* m, int c, int

4、 n) /回代,求最优解out endl 得到的一组最优解如下 : endl;for(int i = 1; i n; i+)if(mic = mi+1c) xi = 0;elsexi = 1;c -= wi;xn = (mnc) ? 1:0;for(int y = 1; y = n; y+)cout xy t;cout endl;return xn;void main()int n, c;int *m;cout &欢&迎使用 0-1 背包问题程序 & endl;cout n ;cout endl c;int *v = new intn+1;cout endl 请输入每个物品的价值(vi): endl;for(int i = 1; i vi;int *w = new intn+1;cout endl 请输入每个物品的重量(wi): endl;for(int j = 1; j wj;int *x = new intn+1;m = new int* n+1;/动态的分配二维数组for(int p = 0; p n+1; p+)mp = new intc+1;knapsack (v, w, m, c, n);traceback(x, w, m, c, n);【运行结果】

展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 办公文档 > 活动策划

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号