首页 > 代码库 > CodeForces 425A Sereja and Swaps
CodeForces 425A Sereja and Swaps
题意:
一串数字 最多可以做k次交换数字 求 最大连续和是多少
思路:
n^2暴力枚举所有区间 那么如果要换数字 一定是从区间外拿大数换区间内的小数 优先队列可以完成操作
代码:
#include<cstdio> #include<cstring> #include<algorithm> #include<queue> using namespace std; #define N 201 int n,m,ans; int a[N]; priority_queue<int> q2; priority_queue< int , vector<int> , greater<int> > q1; int main() { int i,j,k,sum,f1,f2; scanf("%d%d",&n,&m); for(i=1,ans=-10000;i<=n;i++) { scanf("%d",&a[i]); ans=max(ans,a[i]); } for(i=1;i<=n;i++) { for(j=i+1;j<=n;j++) { while(!q1.empty()) q1.pop(); while(!q2.empty()) q2.pop(); for(k=1,sum=0;k<=n;k++) { if(k<i||k>j) q2.push(a[k]); else { q1.push(a[k]); sum+=a[k]; } } for(k=m;k&&!q1.empty()&&!q2.empty();k--) { f1=q1.top(); q1.pop(); f2=q2.top(); q2.pop(); if(f1<f2) { sum-=f1; sum+=f2; } else break; } ans=max(ans,sum); //printf("%d %d %d %d\n",i,j,sum,ans); } } printf("%d\n",ans); return 0; }
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。