摘要: 0-1背包问题:有N件物品和一个容量为V的背包。第i件物品的费用是c[i],价值是w[i]。求解将哪些物品装入背包可使这些物品的费用总和不超过背包容量,且价值总和最大。这个问题的特点是:每种物品只有一件,可以选择放或者不放。算法基本思想:利用动态规划思想 ,子问题为:f[i][v]表示前i件物品恰放入一个容量为v的背包可以获得的最大价值。其状态转移方程是:f[i][v]=max{f[i-1][v],f[i-1][v-c[i]]+w[i]} //这个方程非常重要,基本上所有跟背包相关的问题的方程都是由它衍生出来的。解释一下上面的方程:“将前i件物品放入容量为v的背包中”这个子问题,如果只考虑第i 阅读全文
posted @ 2011-12-13 17:46 fly1988happy 阅读(42810) 评论(13) 推荐(8) 编辑
摘要: 题目:求(1)一组数字的全排列(2)一组数字中某几个数字的组合一、排列算法:全排列是将一组数按一定顺序进行排列,如果这组数有n个,那么全排列数为n!个。现以{1, 2, 3}为例说明如何编写全排列的递归算法。 如下图所示:上图中,第一层S1表示第一个数分别与第1、2、3个数交换位置,如123是1和第一个数1交换,213是1和第二个数2交换,321是1和第三个数交换。第二层S2是第二个数分别与第2、3个数交换位置。则最后一层的所有叶子节点,即为全排列的所有结果。第k层中的节点Sk就是父节点中的第k个数,分别与第k、k+1...n个数交换位置。递归算法代码:代码#include <stdio 阅读全文
posted @ 2011-12-13 11:27 fly1988happy 阅读(1681) 评论(0) 推荐(0) 编辑