Codeforces 425A Sereja and Swaps(폭력)

1238 단어
폭력 매거 구간 시작과 끝, 표기 구간 내의 원소가 나타났고, 원수 그룹과 구간 그룹을 모두 정렬하였으며, 원수 그룹이 가장 큰 표기되지 않은 원소로 구간 중 가장 작은 원소를 순서대로 바꾸었다.
코드:
#include <iostream>
#include <cstdio>
#include <cstring>
using namespace std;
#define LL long long
#include <algorithm>
#include <vector>
int a[205];
struct node{
	int n,id;
}G[205],ord[205];

int N,K;
bool vis[205];

bool cmp(node a,node b){
	return a.n>b.n;
}

int main(){
	scanf("%d%d",&N,&K);
	int pnum=0;
	for(int i=1;i<=N;i++){
		scanf("%d",&G[i].n);
		G[i].id=i;
		ord[i].n=G[i].n;
		ord[i].id=G[i].id;
	}
	sort(ord+1,ord+N+1,cmp);
	int res=-10000000;
	for(int i=1;i<=N;i++){
		for(int j=i;j<=N;j++){
			vector<node> cur;
			memset(vis,0,sizeof(vis));
			int sum=0;
			for(int k=i;k<=j;k++){
				sum+=G[k].n;
				vis[G[k].id]=1;
				cur.push_back(G[k]);
			}
			sort(cur.begin(),cur.end(),cmp);
			int pos=cur.size()-1;
			int tk=K;
			for(int k=1;k<=N;k++){
				if(tk==0) break;
				if(ord[k].n<=cur[pos].n||pos==0) break;
				if(!vis[ord[k].id]){
					sum-=cur[pos].n;
					sum+=ord[k].n;
					pos--;
					tk--;
				}
			}
			res=max(res,sum);
		}
	}
	printf("%d",res);
	return 0;
}

좋은 웹페이지 즐겨찾기