求解C++背包十年在线阅读可看题目

问题描述:给定n种物品和一背包┿年在线阅读可看物品i的重量是wi,其价值为vi背包十年在线阅读可看的容量为C。问:应如何选择装入背包十年在线阅读可看的物品使得裝入背包十年在线阅读可看中物品的总价值最大?

问题分析:先将n件物品顺序排列,依次装入背包十年在线阅读可看每装入一件即检查当時背包十年在线阅读可看物品体积是否超过C,若装入该物品后不超过背包十年在线阅读可看容量C则装入,否则弃之取下一个当背包十姩在线阅读可看中无法装入新物品时,记录背包十年在线阅读可看中物品总价值为V 若当前背包十年在线阅读可看中物品总价值V为最大值,则将当前物品组合记录并取出最后装入的物品,继续装入其他未装入的物品如此重复直到所有组合尝试过,输出使总价值V最大的物品组合

输入样例: 物品体积分别为{4,73,54,2};价值分别为{47,35,41}

输出样例: 最大价值为10,其组合为体积为7价值为7的第2件物品和体積为3价值为3的第1件物品

设计思路:设一维数组w[1:n]用来存放n件物品的体积一维数组vi[1:n]用来存放n件物品价值,一维数组v[1:n]用来存放当前为止放入背包十年在线阅读可看物品价值最大组合的序号一维数组s[1:n]用来存放放入背包十年在线阅读可看内的物品的序号,C为背包十年在线阅读可看能容纳的体积V为背包十年在线阅读可看内物品总价值,Vmax为当前为止物品组合最大价值i为待选物品序号。每进栈一件物品就从C中减去該物品的体积,若C-W[i]>=0,则该物品可选若C-W[i]<0,则该物品不可选此时物品组合总价值与Vmax比较,若大于Vmax则替换Vmax及v[1:n],若i>n则需退栈,若此时栈空則结束运行并输出此时Vmax和v[1:n]。

数据结构:w[1:n]:存放n件物品的体积

vm[1:n]存放当前为止价值最大物品组合序号。

s[1:n]:存放放入背包十年在线阅读可看内物品序号

C:背包十年在线阅读可看能容纳的体积。

V:背包十年在线阅读可看内物品总价值

Vmax:当前为止物品组合最大价值。

测试结果: 最夶价值为10其组合为体积为7价值为7的第2件物品和体积为3价值为3的第1件物品

参考书籍:《计算机软件技术基础》 清华大学出版社 第三版

算法優点:能够准确找出能够装的最大物品价值组合并输出

算法缺点:如果多组物品最大价值相同,只能输出第一组物品

功能拓展:可以再建竝一个存储空间存放所有能够构成最大价值的物品组合

功能应用:可以方便人们解决一些数据量巨大的最优解问题


}

问题描述:设有n件体积分别为w1、w2……wn的物品和一个能装载总体积为T的背包十年在线阅读可看要求从n件物品中挑选若干件物品,其总体积之和恰好装满背包十年在线阅读鈳看若能,则背包十年在线阅读可看有解否则无解;

求解方法:先将n件物品顺序排列,依次装入背包十年在线阅读可看每装入一件即检查当时背包十年在线阅读可看物品体积是否超过T,若装入该物品后不超过背包十年在线阅读可看容量T则装入,否则弃之取下一个矗到装满背包十年在线阅读可看为止。若在装入若干物品后背包十年在线阅读可看未满但又无其他物品可选时,说明已装入背包十年在線阅读可看内的物品不合适需从背包十年在线阅读可看中取出最后装入的物品,继续在其他未装入的物品中挑选如此重复知道装满背包十年在线阅读可看(有解)或者无物品可选(无解);

输入输出样例:若T=10;W=(4,73,54,2)时执行程序,输出结果为Wi=(44,2)

设计思路:设一维数组W[1:n]用来存放n件物品的体积,栈S[1:n]用来存放放入背包十年在线阅读可看内的物品的序号T为背包十年在线阅读可看能容纳的体積,i为待选物品序号每进栈一件物品,就从T中减去该物品的体积若T-W[i]>=0,则该物品可选,若T-W[i]<0,则该物品不可选若i>n,则需退栈若此时栈空,則说明无解

数据结构:W[1:n]:存放n件物品的体积。S[1:n]:存放放入背包十年在线阅读可看内物品的序号

测试结果:背包十年在线阅读可看装的粅品质量为:4,42;

参考书籍:《计算机软件技术基础》 清华大学出版社 第三版

算法缺点:采用回溯求解,效率较低

功能优点:能够准確找到背包十年在线阅读可看解(背包十年在线阅读可看有解时)。

功能缺点:找到背包十年在线阅读可看第一个解后即退出不能找到铨部解。

功能拓展:在遍历所有可能解之前不结束程序记录解的值之后继续执行程序知道找出所有解。

思考的问题:如何输出所有解

 
}

我要回帖

更多关于 背包十年在线阅读可看 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信