rt
- 添加评论
rt
其实足够耐心的话 可以看排名里 别人的AC代码 思路应该就是动态规划吧,状态dp[i]表示 前i个数的合法的方案数,转移是
dp[i] = sum{ dp[k] | 1 < k < i && sum(k+1,i)!=0 } = sum{ dp[k] | 1 < k < i } - sum{ dp[k] | 1 < k < i && sum(k+1,i)==0 }
关键是求后半部分怎么找到sum(k+1,i)==0 的k, 等价于找 prefixSum(k)== prefixSum(i),因为这里前缀比后缀维护容易。利用容器map M, M[ps] = sum{dp[k] | prefixSum(k)==ps }。 那么 dp[i] = sum{ dp[k] | 1 < k < i } - M[prefixSum(i)]。
太菜了,看了好久没看懂-_-.谢谢指点