这要学习的是如何枚举区间,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[210]; cin >> n>>kk; for(int i=0;i<n;i++) cin>>a[i]; int maxx=-1010; for(int i=0;i<n;i++) { for(int j=i+1;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+1;k<j;k++) { sum+=a[k]; ve.push_back(a[k]); } for(int k=0;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=0;k<kk&&k<l1&&k<l2;k++) { int x=vec[l2-k-1]; int y=ve[k]; if(x-y<=0)break; sum=sum+x-y; } maxx=maxx>sum? maxx:sum; } } cout << maxx<<endl; return 0; }