1. 程式人生 > >【HDU】5783 Divide the Sequence

【HDU】5783 Divide the Sequence

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; }