题目链接https://ac.nowcoder.com/acm/contest/1109/E来源:牛客网
题意:给你n长度的序列,让你最多选m段序列,每段贡献是端点不能重复使用
求这几段对答案的最大贡献
解:先求前缀和,然后对前缀和数组进行排序。贪心选择目前能选的里面最大的亮度。当贡献是负数时停止。
#include<bits/stdc++.h>
#define ll long long
using namespace std;
const int maxn =1e5+10;
int rd(){int t;scanf("%d",&t);return t;}
#define en '\n'
int a[maxn];
int main(){
#ifdef local
freopen("input2.txt","r",stdin);
#endif // local
int n,m,c;
while(cin>>n>>m>>c){
a[0]=0;
for(int i=1;i<=n;i++)
{
a[i]=a[i-1]+rd();
}
sort(a,a+1+n);
ll ans=0;
for(int i=0;i<m;i++){
if(a[n-i]-a[i]>c)ans+=a[n-i]-a[i]-c;
else break;
}cout<<ans<<en;
}
}