DAY1 T1

正所谓暴力出奇迹讲的就是这个道理

题目
送分题(songfen)
Time Limit:1000ms Memory Limit:128MB

题目描述
LYK喜欢干一些有挑战的事,比如说求区间最大子段和。它知道这个题目有O(n)的做法。于是它想加强一下。
也就是说,LYK一开始有n个数,第i个数字是ai,它找来了一个新的数字P,并想将这n个数字中恰好一个数字替换成P。要求替换后的最大子段和尽可能大。
LYK知道这个题目仍然很简单,于是就扔给大家来送分啦~
注:最大子段和是指在n个数中选择一段区间[L,R](L<=R)使得这段区间对应的数字之和最大。

输入格式(songfen.in)
第一行两个数n,P。
接下来一行n个数ai。

输出格式(songfen.out)
一个数表示答案。

输入样例
5 3
-1 1 -10 1 -1

输出样例
5

样例解释
将第三个数变成3后最大子段和为[2,4]。

数据范围
对于30%的数据n<=100。
对于另外30%的数据ai,P>=0。
对于100%的数据n<=1000,-1000<=ai,P<=1000。


看到这道题目
我心中萌生了有个大胆的想法
一个一个改数,然后分别求最大值,取max
仔细分析一下
第一次改是一个n的循环
然后去找最大子段和也是个n的循环
那么这个就是个O(N^2)的做法
既然n<=1000,那么就肯定可以跑得过去呢
嗯嗯!!!

#include <cstdio>
#include <iostream>
using namespace std;
int a[1001];
int maxm=-1e7;
int main()
{
    //freopen("songfen.in","r",stdin);
    //freopen("songfen.out","w",stdout);
    int n,m;

    scanf("%d%d",&n,&m);

    for(int i=1;i<=n;i++)
     scanf("%d",&a[i]);

    for(int i=1;i<=n;i++)
     {
        int p=a[i];
        a[i]=m;

        int max1=0;
        for(int j=1;j<=n;j++)
         {
            max1+=a[j];
            maxm=max(max1,maxm);
            if(max1<0) max1=0;
         }

        a[i]=p;
     }

     printf("%d",maxm);

     return 0;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值