选定最多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;
}