【HDU】5783 Divide the Sequence
阿新 • • 發佈:2019-02-15
Divide the Sequence
題目連結
題目大意
給定一個序列A,現在要把A分成儘量多的連續子序列,要求每段子序列的每段字首和都大於0。
題解
貪心
算是這次的簽到題把,注意是每段連續子序列的每段字首和都要大於0(一開始還把這裡看錯了…),因為每段字首和都要大於0且一定有解,所以對於每一個負數,它只可能與前面的數成一段,而對於一個正數,如果不需要和後面的陣列和的話他一定可以單獨作為一段。基於這種思想,我們從後向前貪心,遇到負數就向前配對知道和大於零,對於一個正數,不需要配對的話直接作為一段。
注意用long long
程式碼
#include <iostream>
#include <cstring>
#include <cstdio>
#define maxn 1000005
#define LL long long
using namespace std;
LL n,a[maxn];
int main()
{
while (scanf("%I64d",&n)!=EOF)
{
for (int i=1;i<=n;i++) scanf("%I64d",&a[i]);
LL ans=0,sum=0;
for (int i=n;i>0;i--)
{
sum+=a[i];
if (sum>=0)
{
ans++;
sum=0;
}
}
printf("%I64d\n",ans);
}
return 0;
}