cf1285BJust Eat It!(求最大子序列)

题目:在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
题意:有一串数,Y和A 两个人取。Y取所有数的和,A取片段(不能全取),如果最后Y的结果大于A的结果,输出YES ,否则输出NO。
思路:1,注意题目中的不能全取,因为是子序列所以不能等于序列,所以只要求1到n-1和2到n里的最大子序列与序列总和做比较。

#include<iostream>
#include<cmath>
using namespace std;
long long t,n;
long long a[100005];
int main()
{
    cin>>t;
    while(t--)
    {
        long long sum=0,sum1=0,maxx=0;
        cin>>n;
        for(int i=0;i<n;i++)
        {
            cin>>a[i];
            sum=sum+a[i];
        }
        for(int i=0;i<n-1;i++)
        {
            sum1+=a[i];
            if(a[i]>sum1)
                sum1=a[i];
            maxx=max(sum1,maxx);
        }
        sum1=0;
        for(int i=1;i<n;i++)
        {
            sum1+=a[i];
            if(a[i]>sum1)
                sum1=a[i];
            maxx=max(maxx,sum1);
        }
        if(maxx<sum)
            cout<<"YES"<<endl;
        else
            cout<<"NO"<<endl;
    }
    return 0;
}

发布了35 篇原创文章 · 获赞 0 · 访问量 692

猜你喜欢

转载自blog.csdn.net/fendouzhilu666/article/details/104400147