题目链接:http://codeforces.com/problemset/problem/578/C
可以看出weakness-x是一个单峰函数,可以使用三分。
然后就是求区间最大子段和。简化问题这里假设只求正最大子段和,dp[i-1]转移到b[i]时,不论b[i]是正是负,若dp[i-1]是正则一定会对它产生“正面影响”,此时dp[i]=dp[i-1]+b[i];若dp[i-1]是负则一定会对b[i]产生“负面影响”,此时应该扔掉dp[i-1],dp[i]=b[i]。
题目要求求出正负最大子段和,这里只需要对b[i]求一遍正最大子段和,再把b[i]取反,再求一遍最大子段和即可。
1 |
|