Codeforces Round #243 (Div. 2) C. Sereja and Swaps

来源:互联网 发布:软件退税政策 编辑:程序博客网 时间:2024/06/05 09:55

枚举可能的区间,然后从区间内和区间外交换最小和最大的。

#include <stdio.h>#include <string.h>#include <iostream>#include <algorithm>#include <vector>using namespace std ;int a[1010] ;int main(){    int n ,k;    while(~scanf("%d %d",&n,&k))    {        for(int i = 1 ; i <= n ; i++)            scanf("%d",&a[i]) ;        int maxx = -9999999,sum ;        for(int i = 1 ; i <= n ; i++)        {            for(int j = i ; j <= n ; j++)            {                sum = 0 ;                vector<int > v ,u;                for(int h = i ; h <= j ; h++)                {                    v.push_back(a[h]) ;                    sum += a[h] ;                }                maxx = max(maxx,sum) ;                for(int h = 1 ; h <= n ; h++)                {                    if(h < i || h > j)                        u.push_back(a[h]) ;                }                sort(v.begin(),v.end()) ;                sort(u.begin(),u.end()) ;                reverse(u.begin(),u.end()) ;                for(int h = 1 ; h <= k && h <= v.size() && h <= u.size() ; h++)//枚举交换次数                {                    if(v[h-1] < u[h-1])                    {                        sum -= v[h-1] ;                        sum += u[h-1] ;                        maxx = max(sum,maxx) ;                    }                }            }        }        printf("%d\n",maxx) ;    }    return 0 ;}


 

0 0
原创粉丝点击