• #613(div2)


    #613 (div2)

    B. Just Eat It!

    • 题意:一段数字序列,如果存在一个不包括所有值的连续区间的和大于等于序列所有值的和,输出NO , 否则输出 在YES

    • 分析: 最大连续子区间解法:(dp[i]=max(dp[i-1],0)+a[i]) 。 如何不让包括所有值呢?只需要([1,n-1])([2,n]) 求两次就可以把所有连续区间(除包括所有值的区间外)都考虑在内。最后简单比较以下就行。

    • 代码:

      #include<bits/stdc++.h>
      using namespace std;
      typedef long long ll;
      const int MA=1e5+5;
      
      ll val1[MA],val2[MA];//分别用于两次最大连续区间和
      ll maxx,sum;	//维护最值,所有值之和
      int n,T;
      ll a[MA];
      
      void init()
      {
          memset(val1,0,sizeof(val1));
          memset(val2,0,sizeof(val2));
          maxx=0;
          sum=0;
      }
      
      void solve()
      {
          for(int i=1;i<n;++i){
              val1[i]=max(val1[i-1]+a[i],a[i]);
              maxx=max(maxx,val1[i]);
          }
          for(int i=2;i<=n;++i){
              val2[i]=max(val2[i-1]+a[i],a[i]);
              maxx=max(maxx,val2[i]);
          }
          if(maxx<sum)printf("YES
      ");
          else printf("NO
      ");
      }
      
      int main()
      {
          scanf("%d",&T);
          while(T--){
              init();
              scanf("%d",&n);
              for(int i=1;i<=n;++i){
                  scanf("%lld",&a[i]);
                  sum+=a[i];
              }
              solve();
          }
          return 0;
      }
      
      
  • 相关阅读:
    【网络流24题----15】汽车加油行驶问题
    【网络流24题】最小路径覆盖问题
    网络流二·最大流最小割定理
    贪吃蛇
    【SCOI2008】着色方案
    DARK的锁链
    【NOIP2014】飞扬的小鸟
    [NOIP2012] 借教室
    [NOIP2012] 开车旅行
    [NOIP2012] 国王游戏
  • 原文地址:https://www.cnblogs.com/A-sc/p/12179067.html
Copyright © 2020-2023  润新知