题目链接
题意:
给你一个只有正数和负数的数组,找一个子序列,使得这个子序列正负交替并且最长。问这个子序列的所有数的和的最大值是多少。
思路:
思路到是很简单,但是我写了bug在那里,卡了我半天。。。。还是自己太菜了。。。看了学长的代码后,真是一种享受,这里我把我学长的代码分享给你们
首先既然要保证正负交替并且最长且和最大。那么,我们要保证在连续的一堆负数中或者正数中选择最大的一个,那么和一定是最大,在每一堆正数或者负数,我都选了一个,肯定是最长且正负交替。那么,享受代码叭
#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
ll a[200005];
int main()
{
int T;
scanf("%d",&T);
while(T--)
{
ll n;
scanf("%lld",&n);
for(int i=1;i<=n;i++)scanf("%lld",&a[i]);
a[n+1]=-a[n];
ll maxx=-1e18;
ll ans=0;
for(ll i=1;i<=n;i++)
{
maxx=max(maxx,a[i]);
if(a[i]*a[i+1]<0)
{
ans+=maxx;
maxx=-1e18;
}
}
printf("%lld\n",ans);
}
return 0;
}