一个数字序列 可以选择它的一些前缀或后缀中的每个数字都乘以 -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;
}
本文发布于:2024-01-28 22:44:02,感谢您对本站的认可!
本文链接:https://www.4u4v.net/it/170645304410826.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
留言与评论(共有 0 条评论) |