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