ccpc湘潭邀请赛 Partial Sum

选定最多m的区间,使区间和的绝对值最大。但是左右端点不能重复选取

首先涉及到区间和的问题,就应该想到用前缀和去优化

这里对前缀和排序 然后贪心的去选取最大、次大

(比赛的时候脑子堵的很,没想出来 可惜了)

#include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
#define ll long long int
using namespace std;
ll sum[100001];
int main()
{
    cin.sync_with_stdio(false);
    ll n,m,c;
    while(cin>>n>>m>>c)
    {
        memset(sum,0,sizeof(sum));
        for(int i=1;i<=n;i++)
        {
            int x;
            cin>>x;
            sum[i]=sum[i-1]+x;
        }
        sort(sum,sum+n+1);
        ll temp=0;
        for(int i=0;i<m;i++)
        {
            ll ntemp=sum[n-i]-sum[i];
            if(ntemp > c) temp+=(ntemp-c);
            else break;
        }
        cout<<temp<<endl;
    }
    return 0;
}

  

原文地址:https://www.cnblogs.com/z1141000271/p/6869446.html