马上区域赛,发现DP太弱,赶紧复习补上。
#普通DP
CodeForces-546D Soldier and Number Game 筛法+动态规划
待补
UVALive-8078 Bracket Sequence
问以每个字符为左端点的最长括号序列是多长。(包括尖、花、中小括号)
状态:设dp[i]为从i开始的括号序列最长长度。
转移:以i+1为起点的最长串后边的字符若与左括号匹配,答案是加上这个字符后边的最长串,否则为零。
HDU-1024 Max Sum Plus Plus
给一个序列,找m个不重叠的连续子串,使这几个子串内的元素和的和最大。
即sum(i1, j1)+sum(i2, j2)+...+sum(im, jm)最大
状态:dp[i][j]表示选择第i个元素,当前是第j个子串。
转移:dp[i][j]=max(dp[i-1][j], dp[k][j-1])+num[i], (k<=i-1)
优化:
维护max(dp[k][j-1])
滚动数组去掉第一维
HDU-4055 Number String
给一个序列相邻元素各个上升下降情况('I'上升'D'下降'?'随便),问有几种满足的排列。
例:ID
答:2 (231和132)
状态:dp[i][j]表示满足以j为结尾的,长度为i的排列方案数。
转移:
str[i]=='I': dp[i][j]=sum(dp[i-1][k]) (1<=k<=j-1)
str[i]=='D': dp[i][j]=sum(dp[i-1][k]) (j<=k<=i)
str[i]=='?': dp[i][j]=sum(dp[i-1][k]) (1<=k<=i)
HDU-5009 Paint Pearls
给一串序列,可以任意分割多次序列,每次分割的代价是被分割区间中的数字种数。
求分割区间的最小代价。n<=5e4
例:1 3 3
答:2
状态