poj1141 区间dp+路径】的更多相关文章

//Accepted 176 KB 47 ms //感谢大神们为我们这群渣渣铺平前进的道路!! //用scanf("%s",s)!=EOF WA到死 #include <cstdio> #include <cstring> #include <iostream> using namespace std; ; ; char s[imax_n]; int dp[imax_n][imax_n]; int n; int min(int a,int b) {…
uva 紫书例题,这个区间dp最容易错的应该是(S)这种匹配情况,如果不是题目中给了提示我就忽略了,只想着左右分割忘记了这种特殊的例子. dp[i][j]=MIN{dp[i+1][j-1] | if(match(i,j) , dp[i][k]+dp[k+1][j] | i<=k<=j .}注意初始化dp[i][i]=1,表示1个字符最少需要一个才能匹配,dp[i+1][i]=0,因为可能只有两个字符使得i+1>j-1,我们可以认为中间是空字符已经匹配了. 打印路径利用了递归,很巧妙,lr…
题目链接:Brackets Sequence 题目描写叙述:给出一串由'(')'' [ ' ' ] '组成的串,让你输出加入最少括号之后使得括号匹配的串. 分析:是区间dp的经典模型括号匹配.解说:http://blog.csdn.net/y990041769/article/details/24194605 ,难点在于要把匹配后的括号输出来. 首先我们知道前面定义dp [ i ] [ j ] 为串中第 i 个到第 j 个括号的最大匹配数目 那么假如我们知道随意 i 到 j 从哪儿插入分点使得匹…
Description We give the following inductive definition of a “regular brackets” sequence: the empty sequence is a regular brackets sequence, if s is a regular brackets sequence, then (s) and [s] are regular brackets sequences, and if a and b are regul…
前言:这两天没有写什么题目,把前两周做的有些意思的背包题和最长递增.公共子序列写了个总结.反过去写总结,总能让自己有一番收获......就区间dp来说,一开始我完全不明白它是怎么应用的,甚至于看解题报告都看不明白,而到了现在,遇到区间dp之类的题目,我不至于没有任何方向,慢慢的推导,有些题目没有自己想象的那么难,还是可以推导出转移方程的,有些题目,在自己推导过后,与解题报告相对照,也总能有一番全新的收获.我是觉得,解题报告需要看,但是怎么看,如何看,却是值得思量....... 1.Light o…
http://codeforces.com/contest/793/problem/D 题意:给出一些点和他们之间的距离,是有向的,这些点从1~n顺序排列,现在选出k个点组成一条路径,使他们之间的距离最短,要求是在路径中,一个被访问过的点不会经过两次或以上. 比如,你访问了1~6这条边,那么你已经访问了1和6这两个点,接下来你就不可以访问5~7这条边了,因为他们之间有6这个点. 思路:区间dp题. 区间dp的话,递推和记忆化搜索都是可以的. d[i][l][r][dir]表示当前访问第i次时,在…
(poj真的炸了,以下代码可能有误) 按照下面这个做题顺序,对区间DP不再那么迷了 LOJ1422 是 dp[i][j]=min(dp[i][j],dp[i+1][k-1]+dp[k][j])而不是dp[i][j]=min(dp[i][j],dp[i+1][k-1]+dp[k+1][j]+dp[k][k]); 因为ai==ak的时候k不是等着i来匹配,而是先用ak-aj之间的匹配结果来和ai匹配,防止之间有am==ak POJ2955 poj爆炸了吗? POJ3280   不用变量k(密码脱落)…
池塘中有n片荷叶恰好围成了一个凸多边形,有一只小青蛙恰好站在1号荷叶上,小青蛙想通过最短的路程遍历所有的荷叶(经过一个荷叶一次且仅一次),小青蛙可以从一片荷叶上跳到另外任意一片荷叶上. 输入数据(frog.in) 第一行为整数n,荷叶的数量.接下来n行,每行两个实数,为n个多边形的顶点坐标,按照顺时针方向给出.保证不会爆double. 输出数据(frog.out):遍历所有荷叶最短路程,请保留3位小数. 数据范围:n <= 720. 这道题一开始可能会想到是区间DP,用dp[i][j]表示走过i…
题目传送门 /* 题意:问最少插入多少个字符使得字符串变成回文串 区间DP:dp[i][j]表示[l, r]的字符串要成为回文需要插入几个字符串,那么dp[l][r] = dp[l+1][r-1]; (str[l] == str[r]) dp[l][r] = min (dp[l+1][r], dp[l][r-1]) + 1,然后按照状态转移递归输出路径 */ /************************************************ * Author :Running_T…
这一道题我一直在想时间该怎么算. 看题解发现有个隐藏的贪心. 路径一定是左右扩展的,左右端点最多加+1(我竟然没发现!!) 这个性质非常重要!! 因此这道题用区间dp f[i][j]表示关完i到j的路灯的消耗. 那么因为要算走的路程,那么还有一维表示当前人在左端点 还是右端点. 然后每次的消耗为当前走这一段的时间乘上这个时候还亮着的路灯 的总功率. 然后这个起点的意义就在于在起点的消耗为0,其他都为正无穷 #include<cstdio> #include<cstring> #in…