![](https://img-blog.csdnimg.cn/20201014180756925.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
acm_动态规划
文章平均质量分 52
lshacm
这个作者很懒,什么都没留下…
展开
-
BZOJ 2595: [Wc2008]游览计划 斯坦纳树
题意:连通n个景点的最小生成树(斯坦纳树) 用spfa转移dp方程,具体转移方式见hdu4085博文 此题还需要输出哪些边被用到了。这里记录一下每次转移的前继,最后从最优解开始,沿着前继边dfs,记录一下被访问到的边,最后按顺序输出被标记的边即可。原创 2016-09-02 10:33:48 · 320 阅读 · 0 评论 -
uvalive5721 Activation(概率dp)
关键词:循环状态转移方程 题意:一个人在银行排队,一开始在n个人中排第m位。共四种情况。1.未处理队首元素,下次重新处理2.与队首元素失去联系,将其放入队尾3.处理队首元素,队首元素永久离队4.系统崩溃,不再处理任何元素。以上四种事件在每次处理时发生的概率分别为p1-p4。求排在他前面的人数小于K时,系统崩溃的概率。 解法:概率dp 1.dp[i][j]:共i人在他前面有j人,到达目标状态的概率原创 2015-06-02 02:06:11 · 284 阅读 · 0 评论 -
poj2096 Collecting Bugs(概率dp)
关键词:期望dp——剩余状态题意:每次在n个程序中的某一个中找出s种bug中的一种。程序和bug种类的选择都是随机的。求至少每个程序中都找到一个bug且s种bug都找到的期望步数。原创 2015-05-27 00:09:18 · 301 阅读 · 0 评论 -
zoj3329 One Person Game(期望dp)
关键词:期望dp,待定系数法 题意:已知有三个骰子,分别有k1,k2,k3个面。一开始cnt=0.。当骰子掷为a,b,c时,cnt归零,否则将三个数的和加入cnt。求第一次cnt>n的时,掷筛子的期望次数。原创 2015-05-27 01:06:54 · 283 阅读 · 0 评论 -
hdu4405 Aeroplane chess(期望dp)
题意:已知起点(0)和可选步数(1,2…6),每次选择一种走法。且存在一些点之间连通,可以直达。 求第一次大于等于n的期望步数。 解法:简单的期望dp原创 2015-05-27 01:25:01 · 293 阅读 · 0 评论 -
uvalive 最大子矩阵
关键词:极端特征统计 题意:已知图由F和R字母组成,求仅由F组成的最大矩阵原创 2015-04-28 09:15:40 · 300 阅读 · 0 评论 -
匹配问题 dp预处理
关键词:dp预处理:排序 题意:x轴上n个点与m个点之间进行匹配,保证1)n每个点都只能匹配一次2)m每个点都得有匹配对象(m<=n),已知两两点之间的匹配代价=坐标差得绝对值,求满足条件的最小匹配代价原创 2015-04-22 01:08:47 · 512 阅读 · 0 评论 -
矩阵加速线性递推公式
关键词:矩阵加速线性递推公式原创 2015-04-17 10:38:28 · 1758 阅读 · 0 评论 -
uva1427 单调队列优化dp
每条东西走向路有(高兴值,时间)二维参量,要从最南边走到最北边,满足:1)每条道路仅走一次2)每行道路所经过的总时间不超过k,求最大高兴值的和3)不能从北向南走状态:f[i][j]:到达第i行第j个顶点(从左起)最大高兴值。最短/长路问题:状态常设为以某点为起点/终点的最优值求数组f。到达(i,j)可以从左、右、下三个方向。设辅助数组L[i][j]从左边到达(i,j)的最大高兴值,R[原创 2015-03-26 00:01:23 · 372 阅读 · 0 评论 -
uva12235 状压dp
关键词:分阶段动态规划、状压dp、主后继法设计转移方程、滚动数组题意:定义一列书的混乱度:相同高度的序列区间混乱度为1。如1 1 2 2 3 的混乱度为3。从n本书中抽出k本书,再将这k本书插入到书架上去,求这种操作后的最小混乱度。特殊条件:书的高度在28-35之间,取整数。做法:将取书和插入分成两个过程考虑。dp[i][j][s][k]:从前i本书中取出j本书剩余书的种类集合为s原创 2015-04-15 00:10:28 · 337 阅读 · 0 评论 -
uva1299 Frontier(环形dp)
关键词:判断点和向量的关系,环形dp 题意:已知平面内n个点的坐标(顺时针给出),试选出若顶点围城周长最小的多边形能够使得另外k个点在该多边形内部原创 2015-06-03 00:19:38 · 396 阅读 · 0 评论 -
UVA10900 So you want to be a 2n-aire?(概率dp)
题意:一共可以答n道题目,初始奖金为1,每次答对题目奖金翻倍,答错奖金清零。每次答对题目的概率在[t,1]变动。求最佳策略下能获得的期望奖金。 解法:概率dp原创 2015-06-02 00:15:27 · 724 阅读 · 0 评论 -
UVA1484 Alice and Bob's Trip(树形dp)
题意:在一棵以0为根的树中,Bob和Alice从0开始轮流选边。Bob想使路径总长度尽量大,Alice想使路径总长度尽量小。寻找路径长度在[L,R]区间内最优操作解,如果不存在,输出Oh my god! 解法:在dp过程中需要加上[L,R]区间的限制!用优先队列挑出满足区间范围条件的子树最优解原创 2015-06-03 22:05:10 · 305 阅读 · 0 评论 -
hdu4085 斯坦纳森林
题意:已知n点m有权边,求一个最小代价森林,使得1到k号点与n-k+1到n号点两两连通 解法:状压dp,两种转移方式,spfa转移原创 2015-09-03 21:30:11 · 738 阅读 · 0 评论 -
hdu 5401 Persistent Link/cut Tree
题意:每次合并两棵树,求新树两两顶点间距之和 解法:记忆化搜索。将原问题划归成几个子问题,分别递归完成计数原创 2015-08-19 14:54:18 · 541 阅读 · 0 评论 -
环上的DP
bzoj1040 骑士 bzoj2878 迷失园乐园bzoj1023 仙人掌图原创 2015-09-08 16:26:30 · 335 阅读 · 0 评论 -
poj3728 The merchant
题意:求树中路径的最大正序数。多组路径询问。 1.用Tarjin算法将多组询问按照lca的不同分成若干类 2.用并查集来优化dp,不会重复访问同一节点。 值得注意的是dp[u]状态的含义在遍历到不同节点时会发生变化:当前询问状态下,u到最上回溯点的dp最优值 重点:Tarjin算法离线处理多组树链询问;树中动态dp状态设计原创 2015-08-17 12:23:30 · 324 阅读 · 0 评论 -
状态压缩DP专题
poj1038 zoj1346原创 2015-08-27 16:20:23 · 673 阅读 · 0 评论 -
UVA 12223 Moving to Nuremberg(树形DP)
关键词:树中选取最优点 题意:简化后的数学模型: 已知一棵含点权和边权的无根树,在树中选择一个点u使得: ∑ni=1value[i]∗d[u][i]\sum_{i=1}^{n}value[i]*d[u][i]最小。原创 2015-05-24 23:48:42 · 347 阅读 · 0 评论 -
UVA 1347 Tour(分解DP)
关键词:dp问题的转移题意:求n个点的最短双调旅行商路径解法:将环形问题分解为两个结尾点的问题,转换dp状态,易于dp转移!原创 2015-05-24 23:54:22 · 254 阅读 · 0 评论 -
海事东北赛&&全国邀请赛总结
总结: 1.B题卡时间过长,没有注意到数据的全面性:数据的输入顺序可能会影响到结果! 2.F题最后没有做出来。原因是平常训练没有加强时间观念的训练!导致一些能够想出来但是有些复杂的DP没有时间去写完。赛场上没有时间一步步演算推导得到dp公式后再去写代码。要养成随敲随想的习惯。 3.至少有两个人非常清楚思路的时候再开始敲题,这样才能在卡题的时候不慌张,至少保证思路的正确性!原创 2015-06-08 09:13:29 · 427 阅读 · 0 评论 -
uva1390 Interconnect(状态数组dp)
关键词:hash用法,hash与状态数组dp 题意:已知一个无向图,每次随机选出两点生成新边,求该图成为连通图的期望添边数。 解法:每个连通状态构成一个数组。如何进行数组的状态表示和转移——hash。将每个状态数组经过hash后成为一个hash范围内的数字。 好处: 1.缩小比较范围。只需要在hsah值相同时才需要判断数组状态是否相同。 2.可以进行状态记录,方便记忆化搜索,提高时间效率。原创 2015-06-04 00:14:42 · 484 阅读 · 0 评论 -
2015编程之美 资格赛 B题 区间dp
关键词:区间dp,统计回文子串数量 充分利用状态简化状态转移方程!原创 2015-04-17 10:43:27 · 354 阅读 · 0 评论 -
斜率优化题目(持续更新)
bzoj1597 关键词:排序+单调队列预处理、斜率优化bzoj3675 序列分割 关键词:滚动数组、斜率优化原创 2015-04-23 01:32:05 · 833 阅读 · 0 评论 -
uva10891 Game of Sum
区间递推1.求s数字序列[i,j]内的和sum[i,j]。利用前缀和在O(n)时间内解决2.dp[i][j[:区间[i,j]内的sum游戏结果 dp[i][j]=max{ sum[i][l]-dp[l+1][j] , sum[l+1][j]-dp[i][l] , i#include#include#include#include#include#include#includ原创 2014-12-24 20:57:03 · 309 阅读 · 0 评论 -
uva10859 Placing Lampposts
求一棵树的最小点覆盖(设为S0),在最小点覆盖相同的情况下使得同时被两个点覆盖的边尽量多(使得仅被一个点覆盖的边尽量少)1.树形dp求点的最小覆盖子集dp[i][j]:j状态下以i为顶点的子树最小点覆盖(S0')。j==1:i的父节点属于S0;j==1:i的父节点不属于S0。状态转移的过程详细解释见代码注释2.对于主要和次要极小值,可以用参数法使其变成一个变量:x=M*a+b,其中原创 2014-12-24 23:35:29 · 354 阅读 · 0 评论 -
UVA10817 最长回文子串
一个字符串删除几个字符后,形成最长回文字符子串/寻找一个字符串的最长回文字符子串(不一定连续)法一:O(n^3)dp[i][j]:[i,j]区间的最长字符子串dp[i][j]=max{ dp[i][j-1],dp[k][j-1]+2 | i-1这个dp的决策在于为第j个字符寻找匹配字符。所以需要遍历[i,j]区间所有字符。#include#include#inclu原创 2015-01-14 00:36:31 · 347 阅读 · 0 评论 -
uva10635
思路:对于序列中没有相同元素的最长公共子序列问题可以转化为最长上升子序列问题。只要把其中的一个序列(设为A序列)按下标与数字1,2...n对应起来,在另一个序列(设为B序列)里将与A序列中相同的元素标记为相同的数字。由于A序列中是严格上升的序列,所以B序列中寻找最长上升子序列,即可与A中的一个序列形成最长公共子序列。#include#include#include#include#in原创 2014-12-24 10:04:04 · 314 阅读 · 0 评论 -
hdu5148 Cities
求一棵n点树的k个点,使得任意两点距离和最小。关键字:树形分组背包、换角度求和完全背包模型F [k; v] = max{ F [k - 1; v]; F [k - 1; v - Ci ] + Wij | item i ∈ group k}伪代码:for k <—1 to K 枚举所有的组 (在树中即为每个子节点) for v <— V to 0 枚举所有的容量 从大到小,保证每组仅有一个进入背包(在树中即为每个孩子仅进入一次) for all item i in group k 每组选择一件原创 2014-12-27 22:48:37 · 484 阅读 · 0 评论 -
uva 11825 Hackers' Crackdown
数学模型:每个集合含0,1...n-1中的若干个元素。把n个已知集合分成尽量多组,使得每一组中集合的并都等于全集(已知的n个元素)1.集合运算的总结(参见另一篇博文)2.符号表示:p[i]:第i个集合中的元素。p[i]的第k位=1 集合中含k元素s:n个集合的子集 (0,1...1 子集含有第k个集合cover[s]:s对应的子集的并集 含有的所有元素f[s]:n个集原创 2014-12-24 22:21:52 · 279 阅读 · 0 评论 -
uva11468 AC自动机&&树形DP
题意:给定一些字符和选择概率,随机选择L此得到长度为L的随机字符串。再给出K个模板串,计算S不包含任何一个模板串的概率。将所有可能字符加入Trie树,建立AC自动机,定义match数组。match[u]=1:u字符串含有模板子串。如何计算match数组?初始化:match[u]=1:u是模板串结尾结点递推公式:match[u]|=match[f[u]](u本身是模板串/u沿着失配边原创 2015-02-01 12:30:26 · 269 阅读 · 0 评论 -
uva11552 字符串重排
关键词:字符串分组重排、最小块数字符串从左到右每k个为一组(保证字符串长度是k的倍数),组内字符串可以任意移动位置,组间顺序不能变换。求变换后最少的块数。块的定义:连续相等的字符串为一个快每一组为一个单位,因此dp时需要加入组作为一维,又发现计算加入新组后块的增量,需要知道上一组中最后一个字符是什么,因此状态设计为dp[i][j]:前i组中,最后一个数是第i组的第j位字符的最小分块数。原创 2015-01-12 00:16:49 · 406 阅读 · 0 评论 -
LA 4256 序列最小修改数
给定一个无向图和一个序列,要求修改尽量少的点,使得序列中相邻两点要么是图中相邻点,要么相同。dp[i][j]:修改前i个数,第i个数为j时的最小修改数。dp[i][j]=min{ dp[i-1][k],是图中的边或者k和j相等 },如果j!=a[i],dp[i][j]还要+1#include #include #include #include #include #d原创 2015-01-11 21:16:50 · 284 阅读 · 0 评论 -
最长上升子序列(含例题)
int d[maxn],g[maxn];int s[maxn],k;int ans;void increase(){//求s[0,1...k-1]中最长上升子序列 mem(d,0),mem(g,0x3f),ans=0; for(int i=0;i<k;i++){ int l=lower_bound(g+1,g+k+1,s[i])-g; d[i]原创 2014-12-24 10:01:06 · 444 阅读 · 0 评论 -
vijos1100 加分二叉树
已知二叉树中序遍历序列,求所有可行树中的某种状态最优解。二叉树中序遍历性质:1.遍历顺序:左节点->根->右节点。2.序列最后一个元素与深度遍历(二叉树前序遍历)时的最后一个元素相同3.同一个子树的遍历顺序是一个连续序列,此序列中的某个点都可能是该子树的根节点dp[i][j]:[i,j]序列中的最优解。根据性质3,必须枚举所有可能的子节点。pre[i][j]:[i,j]序列子树的根节点是k原创 2014-12-28 22:54:55 · 294 阅读 · 0 评论 -
bzoj1040 骑士
每个骑士恨且仅恨一个人,不能与他共同出战,每个骑士还有一个武力值,问不冲突的最大出战武力值是多少?关键词:基环森林(每棵树上有且仅有一个环)的最大权值独立集建图时每个骑士指向他恨的人,该图的特点:仅有一条出边。结论:每个点有且仅有一条出边的连通图的底图(有向边改为无向边)是基环树。证明:引理:n个点构成无向连通图,则边数-点数+1=最小环数(每个环内无其他环)。该结论是经验结论,例原创 2014-12-29 01:15:19 · 610 阅读 · 0 评论 -
dp 斜率优化
关键词:dp,斜率优化 dp[i]=min/max{dp[j]+fun(i,j),1<=j< i},当i和j可分离时,用单调队列维护即可(维护前j个中的最小/大值);当i和j不可分离时,可使用斜率优化。原创 2015-04-23 00:23:46 · 315 阅读 · 0 评论 -
uva 11600 期望dp 状压dp
关键词:期望dp,期望哈密顿路径,存储已完成某项操作的所有编号------二进制(状压dp)题意:一共有n个点,由m条双向道路连接,当你从1出发,每天可以走向2-n的任意一个目标点,下一天从目标点出发,再走向除该点之外的任意一点,如果行走的道路不存在,则在行走之后就自动生成。如果每次行走都是随机的,问所有点都连通的期望天数是多少?原创 2015-04-17 09:16:10 · 292 阅读 · 0 评论 -
uva1407 树形分组背包
题目大意:一棵有根树,从根节点出发,移动距离不超过num,求最多能经历多少个点?问题可以转化为“经历k个点最少移动多少距离”。模型同hdu某次bestcoder第四题Cities。具体模型分析详见那题题解。dp[u][k][0]:经过k个顶点不回到自身的最小移动距离dp[u][k][1]:经过k个顶点回到自身的最小移动距离dp[u][k][1]=min(dp[u][k]原创 2015-03-27 00:04:19 · 297 阅读 · 0 评论 -
uva1437 String painter
给定两个长度相同的字符串s和t,每次将s的一个连续子串刷成相同字符,问至少需要多少步才能将s字符串刷成t字符串?1.先考虑简化问题:s为空串的情况设g[i][j]:从空串刷成t串需要的最少次数方案一:t[i]!=t[j],不存在一次从头刷到尾的操作g[i][j]=min(g[i][j],g[i][k]+g[k+1][j]),i方案二:t[i]==t[j],存在一次从头刷到尾的操原创 2015-03-03 23:47:20 · 364 阅读 · 0 评论