
DP
XHRlyb
这个作者很懒,什么都没留下…
展开
-
Usaco 奶牛抗议(树状数组+DP+离散化)
题目链接:奶牛抗议 题解:用 dp[i] 表示前 i 头奶牛的分组方案,s[i] 表示前 i 头奶牛的理智度的和,那么就有转移 dp[i]=sum{ dp[j] } ( s[i]-s[j]>=0 且 i>j )。所以,把前缀和hash成树状数组下标,树状数组里存dp的值。时间复杂度 O(n*log n)。 code#include<iostream>#include<cstdio>#incl原创 2017-09-10 20:40:34 · 422 阅读 · 0 评论 -
洛谷 P3479 [POI2009]GAS-Fire Extinguishers(树形DP)
题目链接:洛谷 P3479题目大意:在一棵n个节点的树上放置灭火器,每个灭火器可以覆盖与其所在节点距离不超过k的节点,每个灭火器最多能覆盖s个节点,求至少需要多少灭火器可以使得所有节点都被覆盖。(n<=100000,s<=n,k<=20)题解:树形DP,设f[i][j]表示以i为根的子树里已经放置的与i的距离为j的灭火器还可以覆盖的点数,g[i][j]表示以i为根的子树里与i距离为j的未被覆盖的点数原创 2018-04-25 21:02:54 · 516 阅读 · 0 评论 -
HDU 3565 Bi-peak Number(数位DP)
题目链接:HDU 3565题目大意:定义“双峰数”为满足可以分割成两个 /\ /\ 的形式的数,求区间[L,R]内双峰数位数和的最大值。题解:第一次写数位DP,开篇BLOG记录一下 ○(>_<)○ 用记忆化搜索实现,dfs(int wei,int cur,int sta,bool fdn,bool fup)表示当前填到第wei位,上一位数字是cur,双峰数的状态为sta,这一位的取值是(true)原创 2018-04-23 12:33:46 · 264 阅读 · 0 评论 -
某场模拟赛 博弈(树形DP+二分+贪心)
题目大意: 一棵n个节点的树,初始时s节点有一个棋子,两个人A、B轮流进行操作,规则如下: ①A先手,A可以选择不进行操作,或选择操作,即选择删除一条边或清除一条边上的标记。 ②B后手,每次B会选择与棋子所在节点相邻的一条没有标记的边,将棋子移动到边的另一端,并在边上做标记。如果与棋子所在节点相邻的边都有标记则B不操作(如果存在与棋子所在节点相邻的未标记的边,则B必须移动棋子)。 ③棋子移动原创 2018-04-22 17:29:18 · 442 阅读 · 0 评论 -
BZOJ 3197 assassin(树形DP+费用流)
题目链接:BZOJ 3197题目大意:给出两棵节点被染成黑白两色的无根树,问第一棵树经过重标号后至少要反转多少个节点的颜色使之与第二棵树完全相同。题解:类似BZOJ3162独钓寒江雪 的解法,可以将树的重心作为根DP,设f[i][j]表示若使第一棵树中以i为根的子树和第而棵树中以j为根的子树完全相同需要反转至少多少个节点的颜色。转移的时候对于同构的子树用费用流转移(还是比较好理解的,详见代码)。co原创 2018-04-16 11:52:16 · 394 阅读 · 2 评论 -
在这里堆一些DP题
这里放一些做不出来的DP题,方便复习总结1、题意: 一个序列,nnn个数 (n≤400)(n≤400)(n\le400) w[i]w[i]w[i],可以删除其中任意段,每次删除获得一定价值。删除的序列满足相邻两数的差为1且数值单增、单减或先增后减(不能先减后增)。已知删除每种长度的序列可获得的价值v[len]v[len]v[len],求最大价值。题解: 区间DP。感觉设的状态比...原创 2018-03-22 19:30:40 · 288 阅读 · 0 评论 -
BZOJ 3162 独钓寒江雪(树形DP)
题目链接:BZOJ 3162题目大意:求一棵无根树上本质不同的独立集个数题解:经典的求树的独立集个数可以DP来做,f[x][0/1]分别表示以x为根的子树中不选点x和选点x的独立集个数,初始f[x][0]=f[x][1]=1,转移的时候f[x][0]*=f[v][0]+f[v][1],f[x][1]*=f[v][0] /*v是x的子节点*/。 这个题只需要考虑一下同构就可以了。判断树是否同构可以哈原创 2018-04-16 09:57:46 · 407 阅读 · 0 评论 -
BZOJ 3743 Kamp(树形DP)
题目链接:BZOJ 3743题目大意:给出n个点n-1条边的一棵树,边有边权,有K个关键点,对于i=1~n,计算从第i个点起遍历K个关键点(不要求最后回到点i)经过的路径总长度的最小值。题解:如果起点是K个关键点之一,答案会是2倍的K个关键点组成的虚树的边权和,再减去起点到剩下K-1个关键点的路径长度的最大值。如果起点不是K个关键点之一,答案会是起点到某个关键点的路经长度,加上以这个关键点为起点、遍原创 2018-04-15 16:29:23 · 436 阅读 · 0 评论 -
BZOJ 4006 管道连接(最小斯坦纳树+状压DP)
题目链接:BZOJ 4006题目大意:n个点,其中p (p<=10) 个重要的点,m条无向边。p个重要点分成几类,求同类重要点互相联通的最小花费。题解:说说我的理解,不一定对。只需要某些点联通,想到最小斯坦纳树;看到 p<=10,想到状压。令dp[i][status]表示i点为(某棵)最小斯坦纳树的根,status表示的点都依照题意同颜色建立起通道的最小花费,最终答案 max { dp[i][2原创 2017-12-21 20:22:05 · 484 阅读 · 0 评论 -
BZOJ3312 不找零(状压DP)
题目链接:BZOJ 3312 题目大意: 按顺序买 N个物品(1 <= N <= 100,000),第i个物品花费c(i),(1<=c(i)<=10,000),用K(1<=K<=16)个面值的范围是 1..100,000,000 硬币支付。购买过程中,可随时停下来付款,每次付款只用一个硬币,支付从上一次支付后到现在的这些所有物品的价格(如果钱够)。如果硬币面值大于所需的费用,不找零。计算买完N个原创 2017-10-11 21:08:34 · 318 阅读 · 0 评论 -
BZOJ1079 着色方案(高维DP+神奇的状态)
题目链接:BZOJ 1079 题目大意:n个木块,排成一行,染成k种颜色,相邻两块颜色不同,求方案数。(各颜色有c1,c2,……,ck个,1<=k<=15,1<=ci<=5,颜料正好可以染完所有木块)题解:这道题是个DP。 - 有一个比较好想的思路是写15维的DP,每一维记录某种颜色还剩几个,但5^15的复杂度是肯定过不了这个题的。所以就有一种巧妙的状态设计:按ci将颜色分类,因为c在1到5之原创 2017-10-11 11:30:47 · 452 阅读 · 0 评论 -
BZOJ1087 互不侵犯king(状压DP)
题目链接:BZOJ 1087 题目大意:在N×N (1<=N<=9)的棋盘里面放K个国王,使他们互不攻击,共有多少种摆放方案。(国王能攻击到它上下左右,以及左上左下右上右下八个方向上附近的各一个格子,共8个格子) 题解:看N的范围1<=N<=9,大概就是状压DP了。把行的放法压起来,状态还是比较好想的。 f[i][j][now]表示前i行一共放了j个king,并且第i行的放法为now时的方案总原创 2017-10-11 09:44:31 · 433 阅读 · 0 评论 -
vijos1264 神秘的咒语(DP)
题目链接:vijos 1264 题意:求两个序列的最长上升公共子序列 题解:f[i,j] 表示以a序列的前i个为结尾、以b序列的第j个为结尾的最长上升公共序列长度,转移见代码(还是比较好理解的吧(⊙v⊙))。 code#include<iostream>#include<cstdio>#include<cstring>#include<algorithm>#include<cmath>原创 2017-09-12 20:40:08 · 561 阅读 · 0 评论 -
洛谷 P3577 [POI2014]Tourism(状压DP)
题目链接:洛谷 P3577题目大意:n个点,m条边的无向图(2<=n<=20000,0<=m<=25000),图中任意两点间不存在节点数超过10的简单路径。给出在每个点建立旅游站点的花费,问最小花费,使得每个点要么建立了旅游站点,要么与它有边直接相连的点里至少有一个点建立了旅游站点。题解:任意两点间不存在节点数超过10的简单路径,说明对图进行dfs得到的dfs树的深...原创 2018-06-17 10:15:15 · 409 阅读 · 0 评论