思路:枚举所有的区间,找到i到j里的最小值和区间外的最大值做比较。如果区间内的最小值比区间外的最大值小就交换
#include<bits/stdc++.h>
#define inf 0x3f3f3f3f;
using namespace std;
int n,k,a[201];
bool cmp(int a,int b)
{
return a>b;
}
int summax(int l,int r)
{
vector<int>A,B;
for(int i=1;i<=n;i++)
if(i>=l&&i<=r)A.push_back(a[i]);
else B.push_back(a[i]);
sort(A.begin(),A.end());
sort(B.begin(),B.end(),cmp);
int cnt=0,ans=0;
while(cnt<k&&cnt<min(B.size(),A.size()))
{
if(A[cnt]<B[cnt])
{
swap(A[cnt],B[cnt]);
cnt++;
}
else break;
}
for(int i=0;i<A.size();i++)
ans+=A[i];
return ans;
}
int main()
{
cin>>n>>k;
int ans=-inf;
for(int i=1;i<=n;i++)
cin>>a[i];
for(int i=1;i<=n;i++)
for(int j=i;j<=n;j++)
ans=max(ans,summax(i,j));
cout<<ans<<endl;
}