题目链接: http://codeforces.com/contest/846/problem/C
题目描述: 在一串数中找到三个坐标delim0, delim1, delim2, 使得 the value of res = sum(0, delim0) - sum(delim0, delim1) + sum(delim1, delim2) - sum(delim2, n) is maximal.
解题思路: 暴力枚举delim0, delim2 , 在固定delim0 枚举delim2的过程中找到最优的delim1, 证明: 初始化delim1是delim0, 由于在向右移动delim2的过程中, 我们要求的
是max{ (delim1,delim2) - (delim0, delim1) } , 我们保存最大值k, 然后在向后更新delim2的时候, 如果前缀和s[delim2] < k 的时候, 就说明此时的sum(delim1, delim2)
是负数了, 这个时候我们就应该让delime1 = delim2 了, 这样才可以让sum(delim1, delim2) 为 0, delim1 为更小的数了, 所以就是max(sum(delim1,delim2)-sum(d0,d1))
代码:
#include #include #include
View Code 思考: 这道题自己没有做出来, 看了别人的代码也想了一段时间, 所以当我们暴力枚举的时候, 一定要看看其中的一维会不会是由另一维推出来的, 这样就可以达到降低时间复杂度的目的