Codeforces 33CWonderful Randomized Sum

it2023-09-24  74

题目链接

题目大意:

一个数字序列  可以选择它的一些前缀或后缀中的每个数字都乘以 -1

前缀和后缀可以交叉也可以为空 

问能得到的最大序列和是多少

 

解题思路:

前缀和为 A  后缀和为B 那么中间的就是 C

总和为 S  

S=A+ B + C

所求等于  -(A+B)+C

    ==   -(S-C)+C

    ==  2*C - S

所以求中间的最大和就行了

代码如下:  

#include<iostream> using namespace std; int main() { int n,i,x; int ans=0; int sum=0; int maxx=0; cin>>n; for(i=0;i<n;i++) { cin>>x; sum+=x; ans+=x; maxx=max(ans,maxx); if(ans<=0) ans=0; } cout<<2*maxx-sum<<endl; return 0; }

 

最新回复(0)