题意:
链接: link.
给定一个长度为n的序列a, 问是否存在a的严格子序列b, 使得b中所有元素的和 严格大于 a中所有元素的和.
思路:
暴力:
我们可以找到a中最大连续子序列c,我们比较sumA和sumC
注意不能是a序列=c序列
我们是从a中选出一段c,
反过来想,我们是从中选取c两端两段只要有一段的和小于0就好了
AC代码:
#include <bits/stdc++.h>
using namespace std;
#define ll long long
#define N 100005
int arr[N];
int main()
{
ios::sync_with_stdio(0);
cin.tie(0);
cout.tie(0);
int t;
cin >> t;
while (t--)
{
int n;
cin >> n;
ll sum = 0;
bool flag = false;
for (int i = 1; i <= n; i++)
{
cin >> arr[i];
}
for (int i = 1; i < n; i++)
{
sum += arr[i];
if (sum <= 0)
flag = true;
}
sum=0;
for(int i=n;i>1;i--){
sum += arr[i];
if(sum<=0)
flag = true;
}
puts(flag ? "No" : "YES");
}
//system("pause");
return 0;
}