动态规划之区间dp
code_mryxj
这个作者很懒,什么都没留下…
展开
-
poj1160 Post Office
题意:有V(v<=300)个 地点,选择p(p<=30)个作为邮局,问怎么选择,其他点到最近的邮局的距离之和最小。 思路: 直接暴力肯定不行。做过dp区间类问题就知道这题是典型区间dp类的问题。 设dp[i][j] 前i个地点里选择j个邮局的最小距离。 很容易推出一个经典的转移方程 dp[i][j]=min(dp[i][j],dp[k][j-1]+cost[k+1][i]);(1<=k#inc原创 2016-09-13 21:25:40 · 352 阅读 · 0 评论 -
hdu1561 The more, The Better(常见分组背包+树形dp)
题意:中文题意。思路:分析完后题意后,攻击先后顺序就是一个有向边,每条边权值1,这个城堡能直接攻击就把他和0点相连。那么这就是一个在树上分组背包的题目。设:dp[i][j]表示在i点已经攻击了j个城堡的最大值。 dp[i][j]=max(dp[i][j-k]+dp[v][k]); v是i的子节点。注意多了一个0点后,相当于多了一个城堡。#includeusing namesp原创 2016-10-20 12:45:28 · 350 阅读 · 0 评论 -
uva1625 Color Length
题意: 有两个由大写字母组成的颜色序列,将它们合并成一个序列:每次可以把其中一个序列开头的颜色放到新序列的尾部。 对于每种颜色,其跨度定义为合并后的序列中字母最后一次和第一次出现的位置之差,求所有合并方案中所有颜色跨度之和的最小值。 思路:紫书上思路非常清晰,但写起来还是有点考验码力,首先预处理c[i][j]:p[i]串前到去q[j]串前总共有多少个已经出现但未结束的字母。 在设dp[i][原创 2016-09-22 00:37:39 · 436 阅读 · 0 评论 -
uva11584 Partitioning by Palindromes
题意:给你一个串,问最少能划分成几个回文串。 例如:racecar本身就是回文串,只用一个划分。 思路:这题定义d[i]表示:0~i字符串的最小回文串的个数,则dp[i]=min(dp[j]+1);s[j][i]满足回文串的条件。 所以这题需要预先处理s[i][j]判断某个子串是不是回文串,时间复杂度O(n^2);转移方程也是O(n^2);#include<bits/stdc++.h>usi原创 2016-09-21 22:34:31 · 380 阅读 · 0 评论 -
CodeForces 149D-Coloring Brackets(区间dp 的好题)
题意: 给一个给定括号序列,给该括号上色,上色有三个要求1、只有三种上色方案,不上色,上红色,上蓝色2、每对括号必须只能给其中的一个上色3、相邻的两个不能上同色,可以都不上色求0-len-1这一区间内有多少种上色方案思路:括号匹配问题是典型区间dp问题,这题在此基础上改编增加颜色的规定,于是我需要多定义两层设dp[i][j][l][r]表示:从i到j这个括号序列i位置为l颜色,j位置为r颜色的状态原创 2016-09-21 00:04:26 · 645 阅读 · 0 评论 -
poj 1651 Multiplication Puzzle(裸区间dp)
题意:一系列的数字,除了头尾不能动,每次取出一个数字,这个数字与左右相邻数字的乘积为其价值,最后将所有价值加起来,要求最小值。 思路:典型的区间dp问题。#include<cstdio>#include<algorithm>using namespace std;int dp[110][110],a[110];const int inf=0x7ffffff;int main(){原创 2016-09-20 23:38:31 · 281 阅读 · 0 评论 -
hdu2476 String painter
题意: 有两个字符串,每次操作可以把一段连续的区间变成同一个字母,问第一个串最小几次操作才能变成第二个串。 前言:一开始看题就知道这是区间dp经典套路,然而这题还是看别人题解+思考过的,遂记载一下这题的解题思路。 思路:dp的题目最开始最重要就是定义状态,区间dp套路基本都是dp[i][j]:表示i到j的最优解。 而这题直接思考 s1串变成s2串有点难搞(我就没搞出来)。就先思考空串变成s2串原创 2016-09-20 21:23:39 · 411 阅读 · 0 评论 -
hdu4283 You Are the One(区间DP)
题意:有n个人每个人都有一个权值v,根据他出场的顺序决定他的心情,比如第k个出场,坏的心情值就是(k-1)v,有一个原理为栈的小黑屋,可以控制出场顺序。问怎么利用这个小黑屋使所有人心情值之和的最小是多少? 思路:首先贪心的想让权值最高的先出场一定最优的,但是这题人出场的顺序只能由一个栈来控制,不能贪心的决策。而栈起到的作用就是改变一定区间内人的出场顺序。 所以这题就用区间dp来做,设dp[i][原创 2016-09-19 00:14:12 · 723 阅读 · 0 评论 -
poj 3537 Minimax Triangulation(区间dp 三角剖分)
题意:给你一个n个顶点多边形,有很多种方法对它进行三角剖分,求最大三角形的面积最小的情况是多少? 思路:典型的区间dp 三角剖分类型的题目。这类题目的转移方程和矩阵链乘的很像,但是区别在于矩阵链乘可以反应决策的过程 ,而三角剖分的则允许随意切割,在这样的情况下,有必要把决策的顺序规范化,使得在规范的决策顺序下,所有的状态都可以用区间表示表示。一般的做法都是对这个多边形,逆时针规定i~j 如图:原创 2016-09-16 18:38:30 · 591 阅读 · 0 评论 -
light oj 1422(区间dp 水题)
题意:给你n天需要穿的衣服的样式,每次可以套着穿衣服,脱掉的衣服就不能再穿了,问至少要带多少条衣服才能参加所有宴会 思路:dp[i][j]代表从区间i到区间j最少的穿衣数量,默认dp[i][j]这个状态的穿衣数,就要等于dp[i+1]+1,如果在k(i#include<bits/stdc++.h>using namespace std;int dp[110][110],a[110];int原创 2016-09-21 20:34:46 · 531 阅读 · 0 评论