2012年10月4日

基本算法-求最大子数组和 及其变种

摘要: 这是个非常常见的算法题,见诸于《编程之美》、《编程珠玑》等经典算法书籍(亦或,经典面试书籍:))。网上有很多关于这个问题的讨论和实现,我谨在此写下自己的理解,可能之前有人写过,但毕竟是自己思考出来的东西,权当记录一下。 问题:一个有N个整数元素的一维数组(A[0],A[1].....,A[n-1]),这个数组当然有很多个子数组(n*n个),求最大的子数组之和。 经典解法:1 maxsofar=02 maxendinghere=03 for i=[0,n)4 maxendinghere=max(maxendinghere+a[i],0)5 maxsofar=max(ma... 阅读全文

posted @ 2012-10-04 20:42 潘的博客 阅读(643) 评论(0) 推荐(0) 编辑

基本算法-0/1背包问题

摘要: 关于0/1背包问题网上有非常多的博文,在此我谨记录一下自己的理解。 问题表述:有N件物品和一个容量为V的背包。第i件物品的体积是C[i](0<=i<=N-1),价值是W[i]。求解将哪些物品装入背包可使价值总和最大。每个物品最多只可以放入背包一次。 这个问题的经典解法思路如下: 我们用f[i][j]表示在考虑前i个物品时体积为j的背包的最大价值,注意,我们并不是把前i个物品全部放入背包,而是考虑i个物品中挑选一些放入背包,使得价值最大的那些情况。 首先,我们考虑只有1个物品(第0个)时,容量分别为0,1,...,V的各背包所包含物品的最大价值。很明显,容量大于等于C[0]的背包的最 阅读全文

posted @ 2012-10-04 19:45 潘的博客 阅读(557) 评论(0) 推荐(0) 编辑

导航