UVa 1630 Folding (区间DP)】的更多相关文章

题意:折叠一个字符串,使得其成为一个尽量短的字符串  例如AAAAAA变成6(A) 而且这个折叠是可以嵌套的,例如 NEEEEERYESYESYESNEEEEERYESYESYES 会变成 2(N5(E)R3(YES)). 析:用dp[i][j] 表示字符串中的第 i 个到第 j 个字符压缩后的最短长度.那么就有两种方式,一种就是自身压缩都最短,另一种就是两段分别压缩, 然后再接起来最短. 代码如下: #pragma comment(linker, "/STACK:1024000000,1024…
Problem F "Folding" Time Limit: 1 Sec Memory Limit: 256 MB 题目连接 http://codeforces.com/gym/100002 Description Bill is trying to compactly represent sequences of capital alphabetic characters from 'A' to 'Z' by folding repeating subsequences insid…
Folding Description   Bill is trying to compactly represent sequences of capital alphabetic characters from `A' to `Z' by folding repeating subsequences inside them. For example, one way to represent a sequence `AAAAAAAAAABABABCCD' is `10(A)2(BA)B2(C…
题目链接:http://vjudge.net/problem/viewProblem.action?id=19461 思路:一类经典的博弈类区间dp,我们令dp[l][r]表示玩家A从区间[l, r]得到的最大值,于是就有dp[l][r] = sum[l][r] - min(dp[l + i][r], dp[l][r - i]) (i >= 1 && i + l <= r),最终我们要求的就是dp[1][n] - (sum[1][n] - dp[1][n]). #include…
题目链接 设$dp[l][r][p]$为走完区间$[l,r]$,在端点$p$时所需的最短时间($p=0$代表在左端点,$p=1$代表在右端点) 根据题意显然有状态转移方程$\left\{\begin{matrix}dp[l][r][0]=min(dp[l+1][r][0]+x[l+1]-x[l],dp[l+1][r][1]+x[r]-x[l]);\\ dp[l][r][1]=min(dp[l][r-1][0]+x[r]-x[l],dp[l][r-1][1]+x[r]-x[r-1]);\end{m…
题目:https://www.luogu.org/problemnew/show/UVA10559 应该想到区间dp.但怎么设计状态? 因为连续的东西有分值,所以应该记录一下连续的有多少个. 只要记录与边界连续的有多少个就能涵盖所有的连续了.只记一边的边界即可. 两个转移:用掉记录的那些连续的 或 在自己区间中再找一个一样颜色的使连续数量+1. 用掉了以后剩余部分的连续长度就是0.也许 j-1 和 j 同色,但这个可以在另一个转移里体现,所以没问题. #include<iostream> #i…
题目:https://www.luogu.org/problemnew/show/UVA10559 区间DP,有点难想: 为了方便,先把原来就是连续一段相同颜色的点看做一个点,记一下长度: f[i][j][k] 表示右边有 k 个和 j 颜色相同的点时(其它都已经各自被消掉),消除 i ~ j 区间的答案: 从消除 j 点来考虑,有两种方法:1.和右边那 k 个点合并消除,所以 f[i][j][k] = f[i][j-1][0] + ( len[j] + k )2 2.和右边以及区间中的某个相同…
题意:给定n个点,其中第i个点的坐标是,且它会在秒后消失.Alibaba可以从任意位置出发,求访问完所有点的最短时间.无解输出No solution. 思路:表示访问完区间后停留在i点的最短时间,表示访问完区间后停留在j点的最短时间.转移方程如下: dp[i][j][0] = min(dp[i+1][j][0]+dis[i+1]-dis[i], dp[i+1][j][1]+dis[j]-dis[i]); dp[i][j][1] = min(dp[i][j-1][0]+dis[j]-dis[i],…
题目大意:给你玩一个一维版的消灭星星,得分是当前消去的区间的长度的平方,求最大得分. 现在分析一下题目 因为得分是长度的平方,不能直接累加,所以在计算得分时需要考虑前一个状态所消去的长度,仅用dp[l][r]来表示区间最大得分是不足以用来转移的. 我们的解决方法是:增加一维预测未来可能会出现的情况,用dp[l][r][t]表示区间[l,r]之后附加t个与r同色的方块时所能得到的最大值.为了降低时间复杂度,我们可以在读入时处理一下,将一段长度为a.颜色为b的区间k表示成一个len[k]=a,col…
题意:给出一个由大写字母组成的长度为n(1<=n<=100)的串,“折叠”成一个尽量短的串.折叠可以嵌套.多解时可输出任意解. 分析: 1.dp[l][r]为l~r区间可折叠成的最短串的长度. 2.ans[l][r]为l~r区间可折叠成的最短串. 3.先判断当前研究的串是否能折叠,若不能折叠,再枚举分割线,折叠分隔后可折叠的串,以使处理后的串最短. #pragma comment(linker, "/STACK:102400000, 102400000") #include…