实用标准文案精彩文档实验项目三用蛮力法、动态规划法和贪心法求解0/1背包问题实验目的1、学会背包的数据结构的设计,针对不同的问题涉及到的对象的数据结构的设计也不同;2、对0-1背包问题的算法设计策略对比与分析
实验内容:0/1背包问题是给定n个重量为{w1,w2,⋯,wn}、价值为{v1,v2,⋯,vn}的物品和一个容量为C的背包,求这些物品中的一个最有价值的子集,并且要能够装到背包中
在0/1背包问题中,物品i或者被装入背包,或者不被装入背包,设xi表示物品i装入背包的情况,则当xi=0时,表示物品i没有被装入背包,xi=1时,表示物品i被装入背包
根据问题的要求,有如下约束条件和目标函数:于是,问题归结为寻找一个满足约束条件式1,并使目标函数式2达到最大的解向量X=(x1,x2,⋯,xn)
背包的数据结构的设计:typedefstructobject{intn;//物品的编号intw;//物品的重量intv;//物品的价值}wup;wupwp[N];//物品的数组,N为物品的个数intc;//背包的总重量1、蛮力法蛮力法是一种简单直接的解决问题的方法,常常直接基于问题的描述和所涉及的概念定义
蛮力法的关键是依次处理所有的元素
用蛮力法解决0/1背包问题,需要考虑给定n个物品集合的所有子集,找出所有可能的子集(总重量不超过背包容量的子集),计算每个子集的总价值,然后在他们中找到价值最大的子集
)1(}1,0{1nixCxwiniii(式1)niiixv1max(式2)实用标准文案精彩文档所以蛮力法解0/1背包问题的关键是如何求n个物品集合的所有子集,n个物品的子集有2的n次方个,用一个2的n次方行n列的数组保存生成的子集,以下是生成子集的算法:voidforce(inta[][4])//蛮力法产生4个物品的子集{inti,j;intn=16;intm,t;for(i=0;