上文已讲述了回溯法以及01背包问题的原理,本文讲述如何顺序执行解决01背包问题以及通过模板模式重构软件。
一、顺序执行流程图
图1无剪枝函数的01背包问题顺序执行算法流程图
图2 有剪枝函数的01背包问题顺序执行算法流程图
无剪枝函数是通用的深度遍历算法,为了减少搜索深度可通过剪枝函数处理完全不可能的分枝。与递归方案的区别主要表现在i>=n后需要“回溯”,即用后进先出的方式将物...
分类:
其他好文 时间:
2014-05-09 22:15:22
阅读次数:
675
背包是一种不支持从中删除元素的数据集合。它的目的是帮助用例收集元素并迭代遍历所有收集到的元素。迭代遍历的顺序没有要求(实现代码中是后进先出)。使用链表以及泛型机制来实现可以达到最优设计目标:
(1)可以处理任意类型的数据; (2)所需的空间总是和集合的大小成正比; (3)操作所需的时间总是和集...
分类:
其他好文 时间:
2014-05-09 16:19:36
阅读次数:
274
题目:
Description
People in Silverland use coins.They have coins of value A1,A2,A3...An Silverland dollar.One day Tony opened his money-box and found there were some coins.He decided to buy a very n...
分类:
其他好文 时间:
2014-05-09 15:00:55
阅读次数:
345
先亮出题目:
一,背包问题 及 回溯法解其问题的伪代码
二,赋值后的具体实例
三,如何看懂伪代码
(1)真正了解回溯法的核心思想
我总结的回溯法解题步骤:
先找出第一个解
回溯
(2)回溯法核心思想 + 伪代码 + 图9-5 树结构来分析
四,伪代码代入值解析
核心:先找到第一个解,再回溯。...
分类:
其他好文 时间:
2014-05-08 16:16:30
阅读次数:
386
/** 01背包,recursive* 05.08/2014*/#include #include
#include #define MAXN 30000using namespace std;int N,W;int w[MAXN],v[MAXN];int
solve(int i, int tw)....
分类:
其他好文 时间:
2014-05-08 14:54:25
阅读次数:
271
OJ题目:click here~~
树上的01背包
const int maxn = 102;
int val[maxn];
int w[maxn];
vector g[maxn];
int dp[maxn][maxn];
int n , m ;
void dfs(int u , int father){
int v , i , j , k;
for(i = w[u];i...
分类:
其他好文 时间:
2014-05-08 05:09:28
阅读次数:
323
Ignatius and the Princess III
Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)
Total Submission(s): 11896 Accepted Submission(s): 8424
Problem Descript...
分类:
其他好文 时间:
2014-05-07 11:58:46
阅读次数:
403
昨晚Debug了好久始终找不出哪里错了,今早再一看发现自己已荣升逗比Beta 2.0 Version.
个人感觉此题为HDU 4003 的弱化版。
把每棵子树都看成一类商品,在每类商品中至多选一件。则问题转化为最基本的分组背包问题。
dp[s][c][k] c == 1时,表示在s结点不返回时走K的最大收益,c == 0时,表示在s结点重新返回时走k步的最大收益。
可以dfs从底到顶更新d...
分类:
移动开发 时间:
2014-05-07 04:52:22
阅读次数:
500
题目链接题意 :
一篇文章有n个单词,如果每行打印k个单词,那这行的花费是,问你怎么安排能够得到最小花费,输出最小花费。思路 :
一开始想的简单了以为是背包,后来才知道是斜率优化DP,然后看了网上的资料,看得还挺懂的,不过我觉得如果以后真遇到斜率DP,要推起来肯定不简单。。。。。网上资料1网上资料2...
分类:
其他好文 时间:
2014-05-07 00:35:18
阅读次数:
424
首先是活动安排问题。
贪心的关键在于排序策略。
思路很简单,对所有活动的结束时间排序,如果结束时间相同,因为要尽量多的参加活动,所以选取开始时间尽量晚的(这样可以安排的比较多),然后依次从早到晚选取不冲突的活动加入,即为最多可以参加的活动。
#include
#include
#include
#include
#include
using namespace std;
clas...
分类:
其他好文 时间:
2014-05-06 23:01:00
阅读次数:
394