B. Just Eat It! CodeForces1285B

Posted hulian425

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了B. Just Eat It! CodeForces1285B相关的知识,希望对你有一定的参考价值。

题意:给你一个序列,他的序列和是否大于他的任何他的子序列(连续的子序列)的和。

题目链接:https://vjudge.net/problem/CodeForces-1285B

思路:求他的最大连续子序列和。那如何求最大子序列和呢?用动态规划求即可。但是要注意的是,子系列不能和原序列一样。

用dp[i]表示以a[i]结尾的最大连续子序列,则容易列出动态转移方程dp[i] = max{dp[i - 1] + a[i], a[i]};

分别求[0, n-1)和[2,n-1]的最大连续子序列和就可以了

 

#include<iostream>
#include <cstdlib>
#include <algorithm>
using namespace std;
typedef long long ll;
const int N = 1e5 + 5;
ll a[N] = {0};
int main()
{
    int t;
    scai(t);
    while (t--)
    {
        int n;
        scai(n);
        ll sum = 0;
        for (int i = 0; i < n; i++)
        {
            scanf("%lld", &a[i]);
            sum += a[i];
        }

        ll ans = 0;
        string s = "YES";
        for (int i = 0; i < n; ++i)
        {
            ans += a[i];
            if (ans >= sum && i != n-1)
                {s = "NO";break;}
            if (ans  < 0) ans = 0;
        }
        ans = 0;
        for (int i = n - 1; i >= 0; --i)
        {
            ans += a[i];
            if (ans >= sum && i != 0)
                {s = "NO";break;}
            if (ans < 0) ans = 0;
        }
        cout << s <<endl;
    }
}

以上是关于B. Just Eat It! CodeForces1285B的主要内容,如果未能解决你的问题,请参考以下文章

Codeforces Round #613 (Div. 2) B. Just Eat It!

B - Just Eat It!

Codeforces 1285B Just Eat It!(最大连续字段和)

codeforce1029B B. Creating the Contest(简单dp,简单版单调栈)

Just do it!!!

B. The World Is Just a Programming Task (Hard Version)