题目

这要学习的是如何枚举区间,vector的基本使用(存入,取出,排序等),这题的思路来自:

http://www.tuicool.com/articles/fAveE3

//vector 可以用sort排序:sort(ve.begin(),ve.end());
//下标从0开始,内部元素可以用vec[i]这样像数组一样表示
//插入用push_back()
//个数用size() #include <cstdio>
#include<iostream>
#include <cstring>
#include <algorithm>
#include<vector>
using namespace std;
vector<int>ve;
vector<int>vec;
int main() {
int n,kk;
int a[];
cin >> n>>kk;
for(int i=;i<n;i++)
cin>>a[i];
int maxx=-;
for(int i=;i<n;i++)
{
for(int j=i+;j<=n;j++)
{
ve.clear();
vec.clear();
int sum=a[i];
ve.push_back(a[i]);
maxx=maxx>sum? maxx:sum; for(int k=i+;k<j;k++)
{
sum+=a[k];
ve.push_back(a[k]);
}
for(int k=;k<i;k++)
{
vec.push_back(a[k]);
}
for(int k=j;k<n;k++)
{
vec.push_back(a[k]);
}
sort(ve.begin(),ve.end());
sort(vec.begin(),vec.end());
int l1=ve.size();
int l2=vec.size();
for(int k=;k<kk&&k<l1&&k<l2;k++)
{
int x=vec[l2-k-];
int y=ve[k];
if(x-y<=)break;
sum=sum+x-y;
}
maxx=maxx>sum? maxx:sum;
}
}
cout << maxx<<endl;
return ;
}
05-11 11:25