ACM/计算机基础算法
文章平均质量分 70
tbwork
博客迁移至 www.tbwork.org
展开
-
【白话算法】如何根据动态规划数组求得最佳策略
我们使用动态规划求解完一个问题时,往往还需要获得具体的选择方案。本文给出一个通用法则,用于如何根据每个状态下的最佳值,即中间值数组来反推最佳方案。可能单独对一个例子来说不难,但是本文给出的是一个较为通用的方法,理解了可以在竞赛中事半功倍。原创 2014-04-03 13:13:36 · 2038 阅读 · 0 评论 -
【白话算法】动态规划算法什么时候能用一维数组解问题
先看三则算法的代码:0-1 背包问题:int dpf[N+1][W+1]; //数组从0开始int dp_solve(){ for(int i=0; i<N;i++) for(int j=0; j<=W;j++) if(j<w[i]) dpf[i+1][j]=dpf[i][j]; else dpf[i+1][j]=max(dpf[i][j],原创 2014-04-01 17:49:00 · 4530 阅读 · 1 评论 -
【白话算法】从0-1背包到无限制背包,到背包变种。
先上题目:0-1背包: 给定n个物品,考虑他们的重量 和 价值,分别为 w[0], w[1], w[2], w[3] ... w[n-1] 和 v[0], v[1], v[2], v[3], v[4] ... v[n-1]。 现在有一个载重量为 W 的背包,求这个背包能放入的物品组合的最大价值。(每个物品只有一件)。物品数量无限制背包: 给定n种物品,考虑各个种类的物品单件的 重量原创 2014-04-01 13:40:31 · 3840 阅读 · 0 评论 -
01背包问题的各种解决方案
#include using namespace std;/*0-1背包问题的 各种解决方案。*/#define N 4 //物品个数#define W 5 //背包载重量int w[N]={2,1,3,2}; // 各个物品的 重量数组int v[N]={3,2,4,2}; // 各个物品的 价值数组//正 逆 向 说明: 正向为 从第0个原创 2014-03-24 18:50:42 · 4008 阅读 · 0 评论 -
递归和动态规划的转换
最近重新研读了下《挑战程序设计》对动态规划和递归的关系有了点新的理解,之前的理解过于机械化,单纯的以为根据递推公式可以直接写DP代码。通俗的来说,递归 是 考虑所有的情况,一般使用搜索(DFS /BFS)来实现。在那些 可以转换为 DP 的递归算法中, 必定有很多重复的情况。比如要做以下算术1 + 11 + 1 + 12 + 1 + 13 + 1 + 1 那原创 2014-03-21 17:45:40 · 5330 阅读 · 1 评论