/*
http://codeforces.com/contest/426/problem/C
最多交换k个数的顺序,求a[i]的最大连续和
爆解
思路:Lets backtrack interval that should contain maximal sum.
To improve it we can swap not more then K minimal elements
in fixed interval to not more K maximal elements not
contained in our interval. As n is quite little we can
do it in any way. Author solution works O(n3?*?log(n)).
*/
#include <iostream>
#include <vector>
#include <string.h>
#include <algorithm>
#include <queue>
#include <set> using namespace std;
int sum[][],a[];//sum[i][j]保存从i到j的和
int main(){
int n,k,i,j,o,ans;
cin>>n>>k;
for(i=;i<n;i++) cin>>a[i];//输入
memset(sum,,sizeof(sum));//清0
ans=-;//最值
for(i=;i<n;i++){
sum[i][i]=a[i];
if(sum[i][i]>ans) ans=sum[i][i];
for(j=i+;j<n;j++){
sum[i][j]=sum[i][j-]+a[j];
if(sum[i][j]>ans) ans=sum[i][j];
}
}
priority_queue<int> temp;
multiset<int> add;
for(i=;i<n;i++){
for(j=i;j<n;j++){
for(o=i;o<=j;o++){//查找从i到j为负的最小的k个
if(a[o]<) temp.push(a[o]);
if(temp.size()>k) temp.pop();
}
if((j-i+)==temp.size()){//全为负
sum[i][j]=temp.top();
while(!temp.empty()) temp.pop();//清空
}
else{
while(!temp.empty()){//清空
sum[i][j]-=temp.top();//将负的移出
temp.pop();
}
} add.clear();//清空add
//对于非[i,j]部分取k个最大正数
for(o=i-;o>=;o--){
if(a[o]>) add.insert(a[o]);
if(add.size()>k) add.erase(add.begin());
}
for(o=j+;o<n;o++){
if(a[o]>) add.insert(a[o]);
if(add.size()>k) add.erase(add.begin());
}
while(!add.empty()){
sum[i][j]+=*add.begin();
add.erase(add.begin());
}
if(sum[i][j]>ans) ans=sum[i][j];//更新ans
}
}
cout<<ans<<"\n";
return ;
}

[ACM_暴力] 最多交换k个数的顺序,求a[i]的最大连续和的更多相关文章

  1. hdu4106 区间k覆盖问题(连续m个数,最多选k个数) 最小费用最大流 建图巧妙

    /** 题目:hdu4106 区间k覆盖问题(连续m个数,最多选k个数) 最小费用最大流 建图巧妙 链接:http://acm.hdu.edu.cn/showproblem.php?pid=4106 ...

  2. 返回最小的k个数

    对于一个无序数组,数组中元素为互不相同的整数,请返回其中最小的k个数,顺序与原数组中元素顺序一致. 给定一个整数数组A及它的大小n,同时给定k,请返回其中最小的k个数. 测试样例: [1,2,4,3] ...

  3. 小米笔试题:无序数组中最小的k个数

    题目描述 链接:https://www.nowcoder.com/questionTerminal/ec2575fb877d41c9a33d9bab2694ba47?source=relative 来 ...

  4. 最小的K个数:用快排的思想去解相关问题

    实现快速排序算法的关键在于先在数组中选择一个数字,接下来把数组中的数字分为两部分,比选择的数字小的数字移到数组的左边,比选择的数字大的数字移到数组的右边. 这个函数可以如下实现: int Partit ...

  5. 【面试题030】最小的k个数

    [面试题030]最小的k个数 题目:     输入n个整数,找出其中最小的k个数.     例如输入4.5.1.6.2.7.3.8这8个字,则其中最小的4个数字是1.2.3.4.     思路一:   ...

  6. 九度 1371 最小的K个数

    题目描述:输入n个整数,找出其中最小的K个数.例如输入4,5,1,6,2,7,3,8这8个数字,则最小的4个数字是1,2,3,4,. 输入: 每个测试案例包括2行:第一行为2个整数n,k(1<= ...

  7. 九度OJ 1371 最小的K个数 -- 堆排序

    题目地址:http://ac.jobdu.com/problem.php?pid=1371 题目描述: 输入n个整数,找出其中最小的K个数.例如输入4,5,1,6,2,7,3,8这8个数字,则最小的4 ...

  8. 算法进阶面试题02——BFPRT算法、找出最大/小的K个数、双向队列、生成窗口最大值数组、最大值减最小值小于或等于num的子数组数量、介绍单调栈结构(找出临近的最大数)

    第二课主要介绍第一课余下的BFPRT算法和第二课部分内容 1.BFPRT算法详解与应用 找到第K小或者第K大的数. 普通做法:先通过堆排序然后取,是n*logn的代价. // O(N*logK) pu ...

  9. 寻找最大的k个数问题

    这是编程之美书第2.5节的一道题目. 各种解法: 解法一,用nlgn复杂度的排序算法对数组进行从大到小排序,取前K个.但这方法做了两件不必要做的事:它对想得到的K个数进行了排序,对不想得到的n-K个数 ...

随机推荐

  1. Ubuntu Server17.10配置静态IP

    今天心血来潮,装个虚拟机Ubuntu打算学点东西,遇到了一些问题,同时借助百度的力量解决了,下面是配置的过程. 一. 安装virtualbox 不知道从哪个版本开始,安装虚拟盒子的时候没有了安装虚拟网 ...

  2. LIS问题(DP解法)---poj1631

    题目链接:http://poj.org/problem?id=1631 这个题题目有些难看懂hhh,但实质就是求LIS--longest increasing sequence. 以下介绍LIS的解法 ...

  3. vortex

    vortex - Bing dictionary US['vɔr.teks]UK['vɔː(r)teks] n.旋涡:涡旋:低涡:感情(或局势)的旋涡 网络漩涡:涡流:旋风 变形Plural Form ...

  4. Largest Rectangle in a Histogram(附上几组测试数据)

    Largest Rectangle in a Histogram http://acm.hdu.edu.cn/showproblem.php?pid=1506 Time Limit: 2000/100 ...

  5. centos云服务器安装Python3记录

    题记 购买了一个月的服务器和公网ip,计划用Python与Nginx写一个web服务,于是踏上了漫漫的摸索之路. 行程 步骤 1.本地ssh连接. 2.mkdir /usr/local/python3 ...

  6. Spring boot starter pom的依赖关系说明

    Spring Boot 通过starter依赖为项目的依赖管理提供帮助.starter依赖起始就是特殊的maven依赖,利用了传递依赖解析,把常用库聚合在一起,组成了几个为特定功能而定制的依赖. sp ...

  7. JAVA规则引擎JSR-94笔札

    JAVA规则引擎JSR-94笔札 JSR-94 是由JCP(Java Community Process)组织所制定的java规则引擎API的java请求规范.它主要定义了规则引擎在java运行时的一 ...

  8. VC2008 类型重定义的问题

    Q: 比如"a.h"里定义了类a,类a所有函数的实现都放在"a.cpp"里.然后"b.h"和"c.h"都需要用到类a,所 ...

  9. MVC,MVP,MVVM区别联系

    本质上都是MVC,MVC在不同技术中的应用衍生出MVP,MVVM MVC:b/s MVP:c/s,尤其winform MVVM:wpf http://www.codeproject.com/Artic ...

  10. HTML5新协议介绍 WebSocket

    WebSocket protocol 是HTML5一种新的协议(protocol).它是实现了浏览器与服务器全双工通信(full-duplex). 现在,很多网站为了实现即时通讯(real-time) ...