zoukankan      html  css  js  c++  java
  • 1490: 连续子串和

    1490: 连续子串和

    http://www.acmore.net/problem.php?id=1490

    Time Limit: 1 Sec  Memory Limit: 128 MB
    Submit: 209  Solved: 36

    Description

    小Y前段时间刚刚做完连续子串和问题,相信大家对连续子串和也都不陌生,现在小Y又碰到了一个新的难题,给定N个整数,求至少K个数连续的最大和为多少?

    Input

    若干组测试数据,每组数据第一行给出两个数N(1<=N<=10^6),K(1<=K<=N)。接下来一行N个数字,分别是a1,a2...aN,对于每个数满足-1000<=ai<=1000。

    Output

    输出长度大于等于K的连续整数和值中最大的一个。

    Sample Input

    5 3 -2 3 6 0 1

    Sample Output

    10

    HINT

     

    Source

    Lyush

    贪心题,枚举每一个数字作为结束点。保留前i位的前缀和sum[i],对于第i为结束的合法序列,其值为sum[i]-sum[i-K],sum[i]-sum[i-K-1],...,sum[i]-sum[0],那么我们只需要对每一个 i 保留sum[0]到sum[i-K]的最小值即可。

    #include<iostream>
    #include<cstdio>
    #include<cstring>
    
    using namespace std;
    
    const int maxn=1000010;
    const int INF=0x3f3f3f3f;
    
    int n,k;
    int num[maxn];
    
    int Solve(){
        int ans=-INF;
        int tmp=INF;
        for(int i=k;i<=n;i++){
            tmp=min(tmp,num[i-k]);
            ans=max(ans,num[i]-tmp);
        }
        return ans;
    }
    
    int main(){
    
        //freopen("input.txt","r",stdin);
    
        while(~scanf("%d%d",&n,&k)){
            for(int i=1;i<=n;i++){
                scanf("%d",&num[i]);
                num[i]+=num[i-1];
            }
            printf("%d\n",Solve());
        }
        return 0;
    }
  • 相关阅读:
    多线程的多核分配问题验证
    C++C#联合调试
    UNITY 手游(安卓)如何使用C/C++代码
    关于C#内存释放的BUG?
    日期转换
    深度剖析目标检测算法YOLOV4
    2. 使用Shell能做什么
    【Jmeter】之进行接口批量压力测试
    MongoDB-ChangeStream使用笔记
    Mongo-BI(bi-connector)配置使用笔记
  • 原文地址:https://www.cnblogs.com/jackge/p/3019051.html
Copyright © 2011-2022 走看看