codeforces 425A Sereja and Swaps(模拟,vector,枚举区间)

题目

这要学习的是如何枚举区间,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;
}
View Code
原文地址:https://www.cnblogs.com/laiba2004/p/3894332.html