evan

For the lasting love

导航

0/1背包问题

问题描述 设U = {u1,u2,u3,......ui}(一共有amount数量的物品)一组物品准备放入容量为size的背包中。 定义每个物品都具有两个属性weight和value. 问题是在所选取的物品总重量不超过背包容量size的前提下使所选的物品总价值最大. 程序的设计: 设V[i, j]用来表示从前i项{u1......ui}中取出来的装入体积为j的背包的最大价值.i的范围是[0,amount],j:[0,size]. 计算的值就是V[amount, size]. V[0, j]对于所有的j的值都是0,因为这时候的包中没有物品. 同时V[i, 0]的值也是0,因为没有物品可以放到size为0的背包里面. V[i, j] = 0 若i = 0 或 j = 0; V[i, j] = V[i - 1, j] 若j < ui.weight;(当物品的重量大于背包承重时,就不把物品放在里面) V[i, j] = max{ V [ i - 1, j ] , V[ i - 1, j - ui.weight ] + ui.value } 若i > 0并且j >= ui.weight; 以上三个式子+动态规划就可以解决问题了,但是也有缺陷:以上所设计的数均只能为整数;容量size可能很大

posted on 2010-08-21 15:53  evander  阅读(117)  评论(0)    收藏  举报