动态规划求解01背包
01背包问题描述:
01背包问题可以假设为现在有一堆物品,每一个物品都具有两个属性,物品的重量和价值。现在有一个承重有限的背包,给定背包的最大承受重量。现在要将物品装入背包,使得背包里所有物品的价值总和最大,我们应该放哪些物品进入背包。
动态规划:
动态规划算法通常所用于求解具有某种最有性质的问题。在某一个具体的问题中,可能会存在很多可行解,而我们所需要的就是去寻找这众多可行解中的最优解。动态规划的思想也和分治算法的思想类似,动态规划算法也是将原问题分解为若干个子问题,然后根据子问题的解来得到原问题的最优解。动态规划算法和分治法不同的是,分治法分解得到的若干个子问题是互相独立的,相互没有约束。而动态规划算法得到的子问题的解之间相互约束,从规模最小的子问题到原问题中的每一级,较高级的子问题的解是由较低级的子问题的最优解得到的,这样保证了每一级所得到的解都是当前子问题的最优解。最终得到的原问题的解也便是最优的。但动态规划算法只能得到最优解中的某一个,而不能得到所有的最优解。
具体步骤:
(1) 把原问题分解成各个子问题,如背包的重量为i(0<=i<=背包最大承重)时,面对前j(1<=j<=n)件物品时,背包所能获取的最大价值。
(2) 依次求出每个子问题的最优解,并且每一个问题的最优解都是由前一个问题的最优解得到,找到其状态转移方程。
(3) 最终通过各个子问题的最优解得到原