zoukankan      html  css  js  c++  java
  • PTA1007

    思路

    1. 固定三个点,左节点,右节点和一个虚拟结点,记录下标,让虚拟结点不断往右跑,尺取法的思想

    2. DP,由于DP和尺取时间复杂度一样,这里就不放代码了

    注意

    特判全是负数的情况,如果全部元素都是负数,则输出 0 第一个元素值 最后一个元素值

    如果不在最后特判的话,如果全是负数则错误,比如:
    5
    -1 -1 -1 -1 -1
    就会输出错误答案:
    0 -1 -1

    AC代码

    #include<iostream>
    #include<algorithm>
    #include<map>
    #include<string.h>
    #include<stdio.h>
    #include<map>
    #include<vector>
    #include<queue>
    using namespace std;
    typedef long long ll;
    #define inf 0x3f3f3f3f;
    
    int a[10010];
    
    int main()
    {
        int n,cnt=0;
        cin>>n;
        for(int i=0;i<n;i++)
        {
            cin>>a[i];
            if(a[i]<0) cnt++;
        }
        if(cnt==n)
        {
            cout<<0<<" "<<a[0]<<" "<<a[n-1]<<endl;
            return 0;
        }
        int l=0,r=0,l1=0,sum=0,ma=a[0]; // ma=0 + 下面if语句两行掉一下顺序在pta会错一组数据,ma必须为a[0],下面if条件顺序必须这样写,否则其他地方需要变一下
        for(int i=0;i<n;i++)
        {
            sum+=a[i];
            if(sum>ma) ma=sum,l=l1,r=i; // 条件不是sun>=0 更新l、r
            if(sum<0) sum=0,l1=i+1; // 让l1先去往右跑
    //        if(sum>ma) ma=sum,l=l1,r=i; // 条件不是sun>=0 更新l、r
        }
        cout<<ma<<" "<<a[l]<<" "<<a[r]<<endl; // 输出最大值、左值、右值
        return 0;
    }
    
  • 相关阅读:
    文艺平衡树
    [BJOI2010] 严格次小生成树
    BZOJ3864 hero meet devil
    [NOI2010]能量采集(莫比乌斯反演)
    陌上花开(三维偏序)(cdq分治)
    树状数组套trie 模板
    SDOI2010粟粟的书架
    OI计算几何 简单学习笔记
    OI知识点|NOIP考点|省选考点|教程与学习笔记合集
    悬线法学习笔记
  • 原文地址:https://www.cnblogs.com/OFSHK/p/14432214.html
Copyright © 2011-2022 走看看