DP&&记忆化搜索
文章平均质量分 78
发奋屠强
这个作者很懒,什么都没留下…
展开
-
求树的子树数目
题目是srm 570 div2的1000题意转化一下就是 给你一棵树,叫你求这颗树的子树有多少个,包括空树。我们用f[i]来表示以节点i为根的树的数目。首先如果只是一个节点,那么以它为根的树的数目为1.如果以a为根的一棵树有k个儿子,那么f[a] = (f[a1]+1)*(f[a2]+1)*(f[a3]+1)....由此可用记忆化搜索将f[1]到f[n]全都求出来,原创 2013-02-18 21:29:15 · 2367 阅读 · 0 评论 -
数位DP
srm465 div2 1000题意是有一段连续的时刻表,有n个时刻,现在给你的仅仅是分钟序列,让你复原小时序列,并求出按字典序排列第k小的序列。我用f[i][j]表示第i位为j小时的序列有多少种。首先如果我已经求出了所有的f[i][j],那么为了求第k小的,我会这样做:从f[0][0]开始枚举,看k,如果k>f[0][0],那么让k-=f[0][0],继续找f[0][1]。。。。原创 2013-02-18 22:54:27 · 670 阅读 · 0 评论 -
多重背包问题的二进制分解思想
在这之前,我空间好像转过一个背包九讲,现在我就只对 01背包和多重背包有点印象了 先说下 01 背包,有n 种不同的物品,每个物品有两个属性 size 体积,value 价值,现在给一个容量为 w 的背包,问 最多可带走多少价值的物品。 int f[w+1]; //f[x] 表示背包容量为x 时的最大价值 for (int i=0; i转载 2013-04-29 15:08:39 · 1610 阅读 · 0 评论 -
01背包好题 ZOJ3703 Happy Programming Contest
是浙大校赛上的一道题。题意:给你总时间,一些题,每个题给你所花时间,吸引力值。然后问你在总时间内,选取一种A题方案,使获得的吸引力值最大,如果有多种,则选择题数较多的,如果有多种,选择罚时较少的。本题重点就是后面的几种比较关系;如果单看第一个条件,就是裸的01背包,但是怎么处理剩下的2个条件呢,也就是在状态转移中加入一些条件:f[v]=max{f[v],f[v-c[i]]+w[i]}原创 2013-04-29 14:03:51 · 1046 阅读 · 0 评论 -
01分数规划
【关键字】0/1分数规划、最优比率生成树、最优比率环【背景】 根据楼教主的回忆录,他曾经在某一场比赛中秒掉了一道最优比率生成树问题,导致很多人跟风失败,最终悲剧。可见最优比率生成树是多么凶残的东西,但是这个东西只要好好研究半天就可以掌握,相信你在看了我写的这篇总结之后可以像楼教主一般秒掉这类问题。因为网上对于01分数规划问题的详细资料并不是太多,所以我就结合自己的一些理解总结这种问转载 2013-05-04 14:47:20 · 23032 阅读 · 4 评论 -
树形DP总结(转)
树,一种十分优美的数据结构,因为它本身就具有的递归性,所以它和子树见能相互传递很多信息,还因为它作为被限制的图在上面可进行的操作更多,所以各种用于不同地方的树都出现了,二叉树、三叉树、静态搜索树、AVL树,线段树、SPLAY树,后缀树等等.. 枚举那么多种数据结构只是想说树方面的内容相当多,本专辑只针对在树上的动态规划,即树形DP.做树形DP一般步骤是先将树转换为有根树,然后在树上进行转载 2013-07-29 19:48:29 · 3118 阅读 · 0 评论 -
hdu4628状态压缩DP
这题学到了一个方法吧:如果要枚举集合S的子集:for(int i = S; i > 0; i=(i-1)&S)如果要枚举包含S的集合:for(int i = S; i 很巧的方法,以前从未见过,在这mark下了。下面给出两种方法的代码:记忆化搜索:#include #include #include #include using namespace原创 2013-07-31 10:36:28 · 999 阅读 · 0 评论 -
背包专辑(转)
(解题报告本人所写,博客内容转自zeroclock)这短时间看了论文《背包九讲》,看到背包问题解法中的优美之处也看到背包问题在现实中的应用,总结出一句话:背包问题值得一看。 背包问题可以概括为这样的模型:有若干种选择,每种选择有一定的代价和价值,做某些选择会得到特定的状态,问我们在约定的条件下怎么得到特定的状态?这里的状态可以是代价和或者价值和或者由其他这两者组合而来的状态。这类问题转载 2013-07-29 19:51:32 · 1030 阅读 · 0 评论 -
hdu4714 Tree2cycle 树形DP
题目是问把一棵树通过剪边、加边形成一个环的最小代价。分成两步,先把树剪成一些链,再把链连接成一个环。My Code://dp[u][0]表示u节点是所在链的端点时,以u节点为根节点的子树形成的最少的切边数。//dp[u][1]表示u节点是所在链的中间的点时,以u节点为根节点的子树形成的最少的切边数。#pragma comment(linker,"/STACK:102400000,1原创 2013-09-10 23:09:33 · 966 阅读 · 0 评论