Codeforces Round #243 (Div. 2) C. Sereja and Swaps 解题报告
来源:互联网 发布:网络监控工程公司 编辑:程序博客网 时间:2024/05/23 00:02
解题报告: 昨晚一直没想出来怎么做……一大憾事。写了个随机化一直WA,直接暴力也是一直超时……
今天看了队友的代码,发现思想还是很简单的:选定一个区间[i, j],则剩下的区间为[1, i-1]和[j+1, n],将选定区间的最小值与剩下区间的最大值交换,使选定区间的和越来越大。非常好的暴力方法啊。复杂度(n^2)*(nlogn + k*logn)。
清晰易懂的思路,简单易实现的代码,真是个非常好的“暴力”算法~
好吧,今天写的代码贴一个,用优先队列存储区间的最大值和最小值,最小值用一个数的负数获得,用的时候再反转就好了。
#include <cstdio>#include <cstring>#include <queue>#include <algorithm>using namespace std;int num[222];int sum[222];void work(int n, int m){ for(int i=1;i<=n;i++) { scanf("%d", num+i); sum[i]=sum[i-1]+num[i]; } int ans=-1e8; for(int i=1;i<=n;i++) for(int j=i;j<=n;j++) { int tmp=sum[j]-sum[i-1]; priority_queue<int> Max, Min; for(int k=i;k<=j;k++) Min.push(-num[k]); for(int k=1;k<i;k++) Max.push(num[k]); for(int k=j+1;k<=n;k++) Max.push(num[k]); for(int i=0;i<m && !Max.empty() && !Min.empty() && Max.top()+Min.top()>0;i++) { tmp+=Max.top()+Min.top(); Max.pop(); Min.pop(); } ans=max(ans, tmp); } printf("%d\n", ans);}int main(){ int n, k; while(~scanf("%d%d", &n, &k)) work(n, k);}
0 0
- Codeforces Round #243 (Div. 2) C. Sereja and Swaps 解题报告
- Codeforces Round #243 (Div. 2) C. Sereja and Swaps
- Codeforces Round #243 (Div. 2) C. Sereja and Swaps
- Codeforces Round #243 (Div. 2)-C. Sereja and Swaps(multiset)
- Codeforces Round #243 (Div. 2)——Sereja and Swaps
- Codeforces Round #243 (Div. 1) A Sereja and Swaps
- Codeforces Round #243 (Div. 1) C Sereja and Two Sequences
- CodeForces Round 223 Div 2 C Sereja and Prefixes
- Codeforces Round #223 (Div. 2)-C. Sereja and Prefixes
- Codeforces 426C Sereja and Swaps【思维】
- Codeforces Round #243 (Div. 2)——Sereja and Table
- Codeforces Round #229 (Div. 2) C. Inna and Candy Boxes ACM解题报告(预处理)
- **Codeforces Round #250 (Div. 2) C. The Child and Toy ACM解题报告(贪心难题)
- Codeforces Round #297 (Div. 2) C. Ilya and Sticks 解题报告
- Codeforces Round #223 (Div. 1) C. Sereja and Brackets
- Codeforces Round #223 (Div. 1) C. Sereja and Brackets
- Codeforces Round #252 (Div. 2)441D. Valera and Swaps
- Codeforces Round #226 (Div. 2) B、C解题报告
- Dinner
- 代码面试最常用的10大算法(经典)
- iOS - 正则表达式判断邮箱、身份证...
- 我写过的歌词正是我所想说的话
- 如何在Visual Studio 10.0中设置Halcon机器视觉
- Codeforces Round #243 (Div. 2) C. Sereja and Swaps 解题报告
- hibernate一对多异常 ERROR: ORA-00904: "CITY0_"."AID": 标识符无效
- poj 3176 Cow Bowling(最简单DP题)
- tomcat 配置虚拟目录
- Java中常用的加密方法(JDK)
- Making a Plugin System
- 编程为什么困难
- 关于修真、法力、法术、武功等的介绍
- 循环buffer