区间DP
文章平均质量分 54
WildKid1024
骐骥一跃,不能十步。驽马十驾,功在不舍!
展开
-
UVA 10891——Game of Sum
题意:给定一个长度为n的序列,两个人分别从两端开始取若干数,但是规定要么左,要么右,问双方都采取最优策略下A的总和减去B的值。 思路:区间dp,dp(i,j)表示先手的总和,那么状态转移方程便为dp(i,j)=sum(i,j)-min(左边取,右边取,0(取完)),记忆化搜索。 code: #include #include #include #include usi原创 2016-03-25 22:11:15 · 360 阅读 · 0 评论 -
UVA 10453—— Make Palindrome
题意:给定一个字符串,求添加最少的字母使得该串是回文串。 思路:区间dp+记忆化搜索。dp[i][j]为区间的最小添加数,那么dp[i][j]=min(dp[i+1][j],dp[i][j-1])+1;相等时则为dp[i+1][j-1]; code: #include using namespace std; const int INF=0x3f3f3f3f; const原创 2016-03-27 20:35:00 · 465 阅读 · 0 评论 -
UVA 11552——Fewest Flops
题意:给定一个长为s的字符串(其中s为k的倍数),然后按照前后分成s/k 组,每组之内可以重排,使得重排后的块数最少(一段连续的字母算是一块)。 思路:区间dp,dp[i][fa]表示前i组且第i+1组的最左边的字符是fa+'a'的状态能得到的最少的块数,那么状态转移也就是枚举两边应该放什么字符。 code: #include using namespace std; c原创 2016-03-28 21:29:15 · 425 阅读 · 2 评论