郑轻新生周赛(7)

 

刚开始签到题害怕数据没有优化会超时而不敢写,最后证明自己的方法可以过去,所以要勇敢点,交一交代码。

在写神机1e7这道题的时候,自己的审题不对,导致浪费很多时间还没ac。一定要好好审题审题审题审题啊啊啊啊啊

在写猫猫吃金币这道题的时候,没有想到维护sum最大值,如果sum小于0了,就让sum=0,重新开始(新思路,值得注意)

 

 

 

题目描述

地面上有排成一条直线的n个金币,金币有不同的价值(甚至是负的),大嘴猫想用它的大嘴来吃这些金币。但是大嘴猫只能张一次嘴,所以它只能吃连续一段的金币。你知道大嘴猫最多能吃多大价值的金币吗?

输入

第一行一个整数n,表示有n个金币 。1 <= n <= 1000000。

接下来n行每行一个整数x,表示金币的价值。x在int范围内。

输出

一行一个整数,表示最多吃下金币的价值。

样例输入
4
1 2 -1 10
样例输出
12
 
从前往后累加,同时维护最⼤值。因为要取sum最⼤的⼀段,所以sum⼩于0时让sum=0。
不用算出前缀和,然后for套for求区间内前缀和,这样太麻烦了,会超时!
#include <bits/stdc++.h>
using namespace std;


int main()
{
    int n;
    cin>>n;
    long long sum=0,m=0;        //为了防止数太大,所以开longlong 
    for(int i=1;i<=n;i++)
    {
        int x;
        cin>>x;
        if(sum+x<0)sum=0;
        else sum=max(sum,sum+x);
    }
    
    cout<<sum<<endl;
    
    return 0;
} 

 

 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
posted @ 2022-01-09 20:04  wellerency  阅读(38)  评论(0编辑  收藏  举报