背包九讲之混合背包问题

https://blog.csdn.net/u013054715/article/details/52436140

背包九讲之混合背包问题

注意事项:

        混合背包的理解请建立在01背包与完全背包、多重背包的基础上。 
        01背包:http://blog.csdn.net/u013054715/article/details/52402304 
        完全背包:http://blog.csdn.net/u013054715/article/details/52403049 
        多重背包:http://blog.csdn.net/u013054715/article/details/52403324

问题描述

        混合背包是01背包,完全背包,多重背包相互结合所产生的问题,即n种物品中,有的物品件数为1种,有的物品件数为有限数种,有的物品件数有无限数种,在这些物品中选取最优解(具体问题同01背包,此处不再详细,请参考前几篇文章)。

问题分析

        这个问题其实跟01背包、完全背包、多重背包同源,可以使用同一种解决办法,只要在解决问题的时候牢牢记住,无限量的物品实际上等同于背包总容量与单间物品的重量相处所得的件数(最大使用量),因为即使物品数量再多也不可能使用到超过最大使用量的部分,又考虑到件数为1的情况是有限量中的特殊情况,所以,这个问题万万全全可以转换为一个多重背包问题,进而又可以通过多重背包问题转换成01背包问题求解。

算法设计

        算法同多重背包基本相同,在此处不在细说,详细参考上一篇文章多重背包的详解,值得一提的是,在多重背包中,使用一个数组n表示物品可取的件数,其中n[i]表示第i件物品数量,在此时,因为有的物品无限量,所以在表示的时候可以使用一个极其大的数表示或者使用一个负数或者0表示,总之是一个不在区间[1,最大使用量]之间的数(此处建议使用负数或0),在递归迭代之前,先对数组n进行一次重新赋值,其中n[i]在区间[1, 最大使用量]之间的数保持不变,其他值赋值为最大使用量即可。
 

猜你喜欢

转载自blog.csdn.net/while_black/article/details/89791842