zoukankan      html  css  js  c++  java
  • 牛客网多校训练 训练技巧

    题目描述  来源

    常州大学组织了新生寒假训练一共N天,每天训练可以获得的训练效果是Ei。但是如果连续训练超过K天,萌新们会受不了而被劝退。
    现在负责人想知道,如何安排能保证萌新不会被劝退并且能获得最大的训练效果。

    输入描述:

    第一行:两个用空格隔开的整数:N和K,1≤N≤100000,1≤K≤N
    第二行到N+1行:第i+1行有一个整数,表示第N天的训练效果是Ei,(0 <= Ei <= 1,000,000,000)

    输出描述:

    第一行:单个整数,表示最大的能力之和
    示例1

    输入

    5 2 
    1
    2
    3
    4 
    5

    输出

    12

    说明

    (除了第三天以外每天都在训练,总训练效果为1+2+4+5=12)

    备注:

    1≤n≤100,000
    代码来源
    #include<bits/stdc++.h>
    using namespace std;
    #define LL long long
    const int N = 1e5+11;
    const LL inf = 0x3f3f3f3f3f3f3f3f ;
    int q[N],st,ed;//q数组中的元素满足递增规律,作为单调栈
    LL dp[N],a[N];
    int main(){
        int n,k;
        while(scanf("%d%d",&n,&k)!=EOF){
             LL sum=0;
             for(int i=1;i<=n;i++) scanf("%lld",&a[i]),sum+=a[i];
             for(int i=1;i<=n;i++){
                while(i-q[st]>k+1) st++;
                dp[i]=a[i]+dp[q[st]];
                while(st<=ed && dp[q[ed]]>dp[i]) --ed; q[++ed]=i;
             }
              LL ans=inf;
              for(int i=n-k;i<=n;i++) ans=min(ans,dp[i]);
            printf("%lld
    ",sum-ans);
        }
    return 0;
    }
  • 相关阅读:
    第二次作业
    第五次作业
    第四次作业
    第三次作业
    第二次作业
    第三次作业
    第二次作业
    第二次作业
    gravity
    card
  • 原文地址:https://www.cnblogs.com/carcar/p/8449566.html
Copyright © 2011-2022 走看看