练习1 CF 1107E Vasya and Binary String
考虑区间DP, 只考虑从左侧消除的情况, 因为从右侧转移到左侧与从左侧转移到右侧是等价的
就是说设$dp[l][r][pre]$为$l$前有$pre$个与$l$同色的最大得分, 暴力转移就好了
ll dfs(int l, int r, int pre) { if (l>r) return 0; ll &ans = dp[l][r][pre]; if (ans) return ans; if (l==r) return ans=a[pre]; ans = a[pre]+dfs(l+1,r,1); REP(i,l+1,r) if (s[i]==s[l]) ans=max(ans,dfs(l+1,i-1,1)+dfs(i,r,pre+1)); return ans; } int main() { scanf("%d%s", &n, s+1); REP(i,1,n) scanf("%d", a+i); printf("%lld\n", dfs(1,n,1)); }