动态规划
文章平均质量分 70
bit_line
NOne
展开
-
[poj3356]字符串dp
/* * dp[i][j]:str1的前i个构成的串变成str2前j个构成的串需要的最少步数 * dp[i][j] = min{ * dp[i-1][j-1]+(str1[i]==str2[j]?0:1) -> 改变 * dp[i-1][j] + 1 -> 删除str1第i个字符 * dp[i][j-1] + 1 -> 添加str2第j个字符到str1的第i个位置 *原创 2014-08-11 21:41:01 · 755 阅读 · 0 评论 -
【树形dp小练】HDU1520 HDU2196 HDU1561 HDU3534
【树形dp】就是在树上做的一些dpdp之类的递推,因为一般需要递归处理,因此平凡情况的处理可能需要理清思路。昨晚开始切了44题,作为入门训练。题目都非常简单,但是似乎做起来都还口以~ hdu1520hdu1520 给一颗关系树,各点有权值,选一些点出来。任一对直接相连的边连接的点不能同时选择,问选择出的权值和最大为多少。 考虑以uu为根的子树可以选择的方法,dp[u]dp[u]表示选择uu时能获得最原创 2015-08-19 17:14:06 · 3414 阅读 · 0 评论 -
poj3073
比赛状态堪忧,笑看自己找不着北.. 把心态放好吧- - 反正窝从一开始就只是为了多学习才上道的 至少已经从学习和智商上给窝带来了一些帮助 智商带不动,好辛苦~~~~(>_<)~~~~ 说说这题吧…这题就是个SBSB题,考虑前ii个字符能匹配的方案数,我们只需要考虑它后几位能否配上一组题目给出的字符即可,于是有dp[i]=∑j=1ndp[j](if.字符[j,i]匹配上了某一组给定字符)dp[i]=原创 2015-07-17 20:57:23 · 926 阅读 · 0 评论 -
【最长上升子序列LIS】O(n^2)和O(nlogn)算法简记
最长上升子序列(Longest Increasing Subsquence)是指对一个序列,其中满足i LIS普遍求法为动态规划。有两种算法。 第一种比较好写,复杂度O(n^2)。 设原序列为a[]。所有下标从1开始(即[1,n])。定义dp[i]为以a[i]结尾的最长上升子序列的长度。很容易得到转移方程:dp[i] = max{1, dp[j] + 1} 且 j dp[i] = 1;原创 2014-11-30 10:20:48 · 900 阅读 · 0 评论 -
【简单dp】Boxes of Chocolates Again
//http://www.bnuoj.com/bnuoj/contest_show.php?cid=5763#problem/65363//题意给一个整数,问有多少种组合方式(如3=1+1+1=1+2=3,所以3有3种组合方式)//生活艰辛。。。被自己蠢哭了 import java.util.*; import java.math.*; public class Main { public s原创 2015-01-25 20:19:31 · 789 阅读 · 0 评论 -
【树形DP】Centroid
题目链接http://www.bnuoj.com/bnuoj/contest_show.php?cid=5763#problem/65371 题意:给一棵树,对某个节点定义一个value:删除该结点后,剩下的各连通分量中最大的结点数目。 思路:不需要用二叉树,于是可以直接旋转,从而可以视任何结点为根。于是建树部分就可以直接对输入的边(a-b)限制方向(a->b),让a作为父亲,b作孩子。 我原创 2015-01-26 13:16:07 · 641 阅读 · 0 评论 -
【状压dp】poj2978 Colored stones
题意:给一个序列,每个数字代表一种颜色,表示一串彩色的石头,现在要从中拿走一些,使得剩下的石头中颜色相同的都连在一起,也就是颜色相同的部分中间不能插入其他颜色的石头。石头数m(原题是k) 我们从“拿走一些石头,使得剩下的石头数最多”逆向考虑。或者说,从原数字序列中选出一个子序列,使得子序列长度最长,并且满足上面的颜色要求。 可以定义:dp[i][j][k]表示前i个,以颜色j结尾,已经选取的原创 2015-01-30 16:05:29 · 904 阅读 · 0 评论 -
【树形dp】Long Live the Queen
题目链接:Long Live the Queen 题意是给一棵树,每个结点都有一个值,从这棵树中选出一颗子树来,使得该子树的所有结点的值得和最大。 容易想到解决思路:定义dp[i]表示以结点i为根的子树中可以获得的最大值。 设i的孩子保存在vector: G[i]中,那么: 初始化:dp[i] = value[i],因为定义的是以该结点为根,所以该结点必须包含。 转移:dp[i原创 2015-01-29 20:17:43 · 792 阅读 · 0 评论 -
[FZU 1022] 三色二叉树/二叉树染色
模拟题,当然也可以叫树形dp。 数据结构作业,所以要写一棵树为了可读性原创 2014-11-19 19:33:18 · 2028 阅读 · 1 评论 -
[hdu3732]dp-背包-转换
/* 乍看是一个简单的01背包,但是仔细看发现数据量很大,背包的数目相当大, 直接搞必定挂掉。 这时我们发现其中有个条件:Vi,Ci <= 10, 那么其实这么庞大的数量中有相当多数量的背包都是一样的:价值和重量都相等。 那么我们开一个二维数组CNT[][]第一维表示重量,第二维是价值,显然可以用 11*11大小的数组统计出来,现在就可以转化成一个多重背包了,而且根据这里的 分析我们原创 2014-10-15 19:06:33 · 731 阅读 · 0 评论 -
[hdu1059]Dividing 多重背包
Java搞的时候要小心'\n'字符的问题,在toj上println后原创 2014-10-15 19:12:11 · 580 阅读 · 0 评论 -
[简单dp]toj1179
题意给2n个点,问把他们两两连接有多少种方案,线段不允许交叉原创 2014-08-30 16:37:12 · 597 阅读 · 0 评论 -
【RMQ-ST算法】hihocoder1068
dp[i][j]dp[i][j]表示区间[i,i+2j)[i, i + 2^j)的最小值 dp[i][j]=min(dp[i][j−1],dp[i+2j−1][j−1]dp[i][j]=min(dp[i][j-1], dp[i + 2^{j-1}][j-1] 对于询问[le,ri][le,ri],令len=ri−le+1len=ri-le+1,再令2lb≤len<2lb+12^{lb}\le len原创 2015-09-25 21:49:15 · 633 阅读 · 0 评论