![](https://img-blog.csdnimg.cn/20201014180756928.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
经典模型
kalilili
双眼闭三年。
展开
-
UVA1218 Perfect Service(染色问题--树形DP)(好题,通法)
题意:一棵树,进行染色,每个没染色的节点恰好和一个染色的节点相连,求染色的节点最少的个数X(以下均以X代表子问题的解)思路:树形DP,细化状态,从而对每个节点的每种状态互相递推这里如何细化状态是难点,而且也是这类难题的共同问题很容易知道每个节点i至少两个状态:dp[i][0]: i没染上色时以i的子树的X。dp[i][1]: i被染色以i为子树的X但是仅仅这两个状态无法实现状态转移原创 2015-03-14 20:49:57 · 873 阅读 · 0 评论 -
Codeforces Round #248 (Div. 1) B. Nanami's Digital Board(DP+ 双指针/单调栈)
B. Nanami's Digital Boardtime limit per test1 secondmemory limit per test256 megabytesinputstandard inputoutputstandard outputNanami is an expert at playing gam原创 2015-06-15 15:55:33 · 642 阅读 · 0 评论 -
E. LIS of Sequence(好题 LIS )
E. LIS of Sequencetime limit per test2 secondsmemory limit per test256 megabytesinputstandard inputoutputstandard outputThe next "Data Structures and Algorithms原创 2015-05-31 12:02:41 · 864 阅读 · 0 评论 -
POJ 2250 Compromise(最长公共子序列)
CompromiseTime Limit: 1000MS Memory Limit: 65536KTotal Submissions: 6750 Accepted: 3018 Special JudgeDescriptionIn a few months the European Currency Union原创 2015-04-03 22:58:01 · 904 阅读 · 0 评论 -
POJ3342 Party at Hali-Bula(树的最大独立集-树形DP-刷表法)
题意:给定一个树,选择若干点,使得选择的结点中任一结点不会和它的子结点同时选择,求能选结点最大数量。同时判断方案数是否为一。思路:树的最大独立集,用树形dp,dfs一遍找每个结点的父亲,是为了从下向上刷每个结点儿子的最大独立集和and每个结点孙子的最大独立集和的表判断方案数是否唯一同样在树形dp的同时递推判断即可算法复杂度可以是线性//248K 0MS C+原创 2015-03-14 11:55:24 · 1208 阅读 · 0 评论 -
Uva 1331 - Minimax Triangulation(最优三角剖分 区间DP)
题目大意:按照顺时针或者逆时针的顺序给出多边的点,要将这个多边形分解成n-2个三角形,要求使得这些三角行中面积最大的三角形面积尽量小,求最小值。思路:用区间DP可以很方便解决,多边形可能是凹边形,注意剖分的三角形必须在多边形内部,所以可以去掉剖分的三角形中包含其他点,但是其他的在多边形外部的三角形没想到其他方法去除,却ac了,不懂为何// Accepted C++ 0.042#inclu原创 2015-03-13 15:54:03 · 1523 阅读 · 0 评论 -
POJ 3311-Hie with the Pie(floyd+TSP 状压DP)
题意:一个送外卖的人,要将外卖全部送去所有地点再回到店离,求最短路。(可以重复经过边)思路:由于可重复走某些边,所以先求各个点的最短路,再TSPdp[i][s] 表示目前在i点还需要遍历s集合后回到0点的最短路径边界条件就是dp[i][0]=dis[i][0]//196 KB 0 ms C++ 1190 B #include#include#include#include原创 2015-03-29 21:00:03 · 747 阅读 · 0 评论 -
POJ 1185 炮兵阵地 (状态DP--经典题)
本题的难度给跪了,完全不是自己的能力范围内,看了别人的解题报告才写的摘自http://blog.csdn.net/woshi250hua/article/details/7736045题目大意:给定一张n*m的地图,地图上有平原p,有山地h,可以在平原p打炮,俗称野战,打炮方向有四个,上下左右,射程是2,要求两个炮不能相互打到,问符合这个要求的情况最多打几个炮?n 解题思路:经原创 2015-03-29 09:26:30 · 722 阅读 · 0 评论 -
POJ 2486-Apple Tree(树形DP)(难)
题意:一颗树,n个点(1-n),n-1条边,每个点上有一个权值,求从1出发,走V步,最多能遍历到的权值思路:(思路转自http://blog.csdn.net/libin56842/article/details/10101807)树形dp,比较经典的一个树形dp。首先很容易就可以想到用dp[root][k]表示以root为根的子树中最多走k时所能获得的最多苹果数,接下去我们很习惯原创 2015-03-29 08:48:22 · 1435 阅读 · 0 评论 -
HDU 1520 Anniversary party(树形DP-最大独立集)
大意:很多领导,能形成一个树形关系网,这些领导参加一个party,每个人都有一个能使party活跃的值,但是每个人又不喜欢跟自己的直接领导同时参加party。为使party气氛最好,求最好气氛值。思路:法一:对子树的根按两种决策找到状态方程,然后用刷表法法二:细化状态,dp[i][0],dp[i][1] 分别表示不选i时的最大集和选了i时的最大集法二的方法更实用,状态细化后更便于找原创 2015-03-29 09:01:28 · 910 阅读 · 0 评论 -
POJ 1463 Strategic game(树形DP-树上的点集覆盖模型)
题意:一城堡的所有的道路形成一个n个节点的树,如果在一个节点上放上一个士兵,那么和这个节点相连的边就会被看守住,问把所有边看守住最少需要放多少士兵。思路:和最大独立集的思路差不多,转移方程差不多,用0,1表示子树的根放不放士兵 dp[root][0] += dp[son][1]; dp[root][1] += min(dp[son][1],dp[son][原创 2015-03-29 09:06:12 · 910 阅读 · 0 评论 -
POJ1651:Multiplication Puzzle(区间DP 最优矩阵链乘)
题意:除了头尾不能动,每次取出一个数字,这个数字与左右相邻数字的乘积为其价值,最后将所有价值加起来,要求最小值和最优矩阵链乘模型一样,最后取出的数决定了序,如果没学过最优矩阵连乘找重复子问题还是比较难找的DP//180K 0MS#include#include#include#includeusing namespace std;int dp[110][110];原创 2015-03-09 20:47:01 · 892 阅读 · 0 评论 -
zoj 3537 cake (区间DP+凸包+ 最优三角形剖分模型)
题意:一块多边形先判凸凹,凸则三角剖分三角剖分模型和最优矩阵链乘模型几乎相同,都是对区间的DP,只不过最优矩阵链乘的最后次乘法决定了决策顺序,三角剖分没天然的顺序,所以要人为加上顺序凸包用了卷包裹法//Accepted 3537 C++ 0 1004#include#include#include#include#include #include using names原创 2015-03-09 20:54:44 · 856 阅读 · 0 评论 -
POJ 1849 Two(树的直径--树形DP)(好题)
大致题意:在某个点派出两个点去遍历所有的边,花费为边的权值,求最少的花费思路:这题关键好在这个模型和最长路模型之间的转换,可以转换得到,所有边遍历了两遍的总花费减去最长路的花费就是本题的答案,要思考,而且答案和派出时的起点无关求最长路两遍dfs或bfs即可,从任意点bfs一遍找到最长路的一个终点,再从这个终点bfs找到起点//1032K 79MS C++ 1455B #include原创 2015-03-15 10:55:09 · 1204 阅读 · 0 评论 -
POJ 1655 Balancing Act(求树的重心--树形DP)
题意:求树的重心的编号以及重心删除后得到的最大子树的节点个数size,如果size相同就选取编号最小的.思路:随便选一个点把无根图转化成有根图,dfs一遍即可dp出答案//1348K 125MS C++ 1127B#include#include#include#include#includeusing namespace std;int n;const int N= 20原创 2015-03-15 09:19:40 · 835 阅读 · 0 评论 -
Light OJ 1013 - Love Calculator(LCS+ 计方案数)
大致题意:有a,b字符串,求最短的字符串使a,b均为它的子序列,求这种最短字符串有多少个思路: 显然最短长度就是|a|+|b|- LCS同样dp两遍,第一遍求LCS,第二遍在LCS的转以上dp出方案数:如果a[i] == b[i] , cnt[i][j] += cnt[i-1][j-1];否则,有两种策略,a[i]是末尾最后一个字符,或b[j]是最后一个字符复杂度O(n^2)原创 2015-10-21 21:10:43 · 745 阅读 · 0 评论