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

简介:


 

复制代码
 1 /*
 2 http://codeforces.com/contest/426/problem/C
 3 最多交换k个数的顺序,求a[i]的最大连续和
 4 爆解
 5 思路:Lets backtrack interval that should contain maximal sum. 
 6 To improve it we can swap not more then K minimal elements
 7  in fixed interval to not more K maximal elements not 
 8  contained in our interval. As n is quite little we can 
 9  do it in any way. Author solution works O(n3?*?log(n)).
10 */
11 #include <iostream>
12 #include <vector>
13 #include <string.h>
14 #include <algorithm>
15 #include <queue>
16 #include <set>
17 
18 using namespace std;
19 int sum[210][210],a[210];//sum[i][j]保存从i到j的和
20 int main(){
21     int n,k,i,j,o,ans;
22     cin>>n>>k;
23     for(i=0;i<n;i++) cin>>a[i];//输入
24     memset(sum,0,sizeof(sum));//清0
25     ans=-5000000;//最值
26     for(i=0;i<n;i++){
27         sum[i][i]=a[i];
28         if(sum[i][i]>ans) ans=sum[i][i];
29         for(j=i+1;j<n;j++){
30             sum[i][j]=sum[i][j-1]+a[j];
31             if(sum[i][j]>ans) ans=sum[i][j];
32         }
33     }
34     priority_queue<int> temp;
35     multiset<int> add;
36     for(i=0;i<n;i++){
37         for(j=i;j<n;j++){
38             for(o=i;o<=j;o++){//查找从i到j为负的最小的k个
39                 if(a[o]<0) temp.push(a[o]);
40                 if(temp.size()>k) temp.pop();
41             }
42             if((j-i+1)==temp.size()){//全为负
43                 sum[i][j]=temp.top();
44                 while(!temp.empty()) temp.pop();//清空
45             }
46             else{
47                 while(!temp.empty()){//清空
48                     sum[i][j]-=temp.top();//将负的移出
49                     temp.pop();
50                 }
51             }
52 
53             add.clear();//清空add
54             //对于非[i,j]部分取k个最大正数
55             for(o=i-1;o>=0;o--){
56                 if(a[o]>0) add.insert(a[o]);
57                 if(add.size()>k) add.erase(add.begin());
58             }
59             for(o=j+1;o<n;o++){
60                 if(a[o]>0) add.insert(a[o]);
61                 if(add.size()>k) add.erase(add.begin());
62             }
63             while(!add.empty()){
64                 sum[i][j]+=*add.begin();
65                 add.erase(add.begin());
66             }
67             if(sum[i][j]>ans) ans=sum[i][j];//更新ans
68         }
69     }
70     cout<<ans<<"\n";
71     return 0;
72 }
复制代码
相关文章
|
JSON API 数据安全/隐私保护
|
运维 应用服务中间件 Linux
自动化运维的利器:Ansible在配置管理中的应用
【10月更文挑战第39天】本文旨在通过深入浅出的方式,向读者展示如何利用Ansible这一强大的自动化工具来优化日常的运维工作。我们将从基础概念讲起,逐步深入到实战操作,不仅涵盖Ansible的核心功能,还会分享一些高级技巧和最佳实践。无论你是初学者还是有经验的运维人员,这篇文章都会为你提供有价值的信息,帮助你提升工作效率。
|
10月前
|
机器学习/深度学习 人工智能 自然语言处理
以史为鉴,未雨绸缪:身处“大模型掀起的AI浪潮中”的感悟和思考
以史为鉴,未雨绸缪:身处“大模型掀起的AI浪潮中”的感悟和思考
|
安全 关系型数据库 网络安全
rds公共网络/公网访问
RDS公网访问允许用户通过互联网连接云数据库,但默认关闭以确保安全。需手动开启并配置公网IP或域名,使用时需注意安全风险,如设置严格防火墙规则、启用SSL/TLS加密和强化身份验证。公网访问可能产生带宽、IP及附加服务费用。内网访问是更安全、经济的选择,除非特定场景(如使用Linked Server功能)需公网访问。在实施时,应权衡安全、成本和需求。
747 1
|
安全 网络协议 网络安全
网络原理(5)--HTTPS是如何进行加密的
网络原理(5)--HTTPS是如何进行加密的
406 0
|
存储 Web App开发 数据采集
|
缓存 分布式计算 数据可视化
Spring Boot + URule规则引擎,太顶了!
前段时间,在做项目重构的时候,遇到很多地方需要做很多的条件判断。当然可以用很多的if-else判断去解决,但是当时也不清楚怎么回事,就想玩点别的。于是乎,就去调研了规则引擎。 当然,市面上有很多成熟的规则引擎,功能很多,性能很好。但是,就是想玩点不一样的(大家做技术选型别这样,这个是反面教材)。最终一款URule的规则引擎吸引了我,主要还是采用浏览器可直接配置,不需要过多安装,可视化规则也做的不错。经过一系列调研,后面就把它接入了项目中,顺便记录下调研的结果。
Spring Boot + URule规则引擎,太顶了!
|
Cloud Native 网络协议 Java
Nacos 2.0 正式发布,性能大幅提升 10 倍!
SpringCloud、SCA,还对接了一些云原生的组件比如 coreDNS 和 sentinel 等。 客户端语言方面目前支持 Java,go python 等主流
Nacos 2.0 正式发布,性能大幅提升 10 倍!
|
机器学习/深度学习 存储 Shell
Google Colab免费GPU大揭晓:超详细使用攻略
Google Colab免费GPU大揭晓:超详细使用攻略
|
存储 供应链 JavaScript
物流货物跟踪管理系统的设计与实现(论文+源码)_kaic
摘 要 为解决物流货物跟踪过程中,跟踪相关信息滞后的问题,本毕业项目设计了物流货物跟踪管理系统。本系统基于B/S架构,采用SSH技术,VUE框架,VS2019平台,Sqlserver数据库,实现了物流公司模块、跟踪点模块和普通用户模块功能;满足了管理员和普通用户的需求;实现了驾驶员信息管理,车辆信息管理,跟踪点信息管理,订单信息管理和查询等功能。 物流货物跟踪相关的管理员和普通用户通过系统在网页进行沟通联系。系统自身建立的数据库更对大量信息进行存储,形成高效的数据集合。普通用户的订单信息流通到管理者、跟踪者、跟踪资源共享,形成清晰广泛的信息结构网,形成在线操作,进行物流管理,方便用户和管理.