UVA12904 Load Balancing(中途相遇法)
虽然这题可以用暴力n^3过,但是还有有种n^2的方法的,枚举b,对于b,分别枚举a和c,得到对于这个b的最优解,然后从所以b中选一个最优的。
要保证字典序最小,只要从小往大枚举就好了
感谢moonflyer
#include<cstdio>
#include<algorithm>
#include<cmath>
#include<cstring> using namespace std; const int maxn = +;
int cnt[maxn];
int sum[maxn]; int main()
{
//freopen("in.txt","r",stdin);
int T;
scanf("%d",&T);
int Cas = ;
while(T--){
int n;
memset(cnt,,sizeof(cnt));
scanf("%d",&n);
for(int i = ; i < n; i++){
int t;
scanf("%d",&t);
cnt[t]++;
}
memcpy(sum,cnt,sizeof(cnt));
for(int i = ; i <= ; i++)
sum[i] += sum[i-];
double ave = n/4.0;
double bdif = 1e30;
int besta = ,bestb = ,bestc = ;
for(int b = ; b < ; b++){
double dif1 = fabs(sum[]-ave) + fabs(sum[b]-sum[]-ave);
int pba = ;
for(int a = ; a < b; a++){
double ndif = fabs(sum[a]-ave)+fabs(sum[b]-sum[a]-ave);
if(ndif<dif1){
dif1 = ndif; pba = a;
}
}
int pbc = b+;
double dif2 = fabs(sum[b+]-sum[b]) + fabs(sum[]-sum[b+]);
for(int c = b+; c<=; c++){
double ndif = fabs(sum[c]-sum[b]-ave)+fabs(sum[]-sum[c]-ave);
if(ndif < dif2){
dif2 = ndif; pbc = c;
}
}
if(dif1+dif2<bdif){
besta = pba; bestb = b; bestc = pbc;
bdif = dif1+dif2;
}
}
printf("Case %d: %d %d %d\n",++Cas,besta,bestb,bestc);
}
return ;
}
UVA12904 Load Balancing(中途相遇法)的更多相关文章
- uva 6757 Cup of Cowards(中途相遇法,貌似)
uva 6757 Cup of CowardsCup of Cowards (CoC) is a role playing game that has 5 different characters (M ...
- LA 2965 Jurassic Remains (中途相遇法)
Jurassic Remains Paleontologists in Siberia have recently found a number of fragments of Jurassic pe ...
- HDU 5936 Difference 【中途相遇法】(2016年中国大学生程序设计竞赛(杭州))
Difference Time Limit: 6000/3000 MS (Java/Others) Memory Limit: 65536/65536 K (Java/Others)Total ...
- 【中途相遇法】【STL】BAPC2014 K Key to Knowledge (Codeforces GYM 100526)
题目链接: http://codeforces.com/gym/100526 http://acm.hunnu.edu.cn/online/?action=problem&type=show& ...
- 高效算法——J 中途相遇法,求和
---恢复内容开始--- J - 中途相遇法 Time Limit:9000MS Memory Limit:0KB 64bit IO Format:%lld & %llu Su ...
- 【UVALive】2965 Jurassic Remains(中途相遇法)
题目 传送门:QWQ 分析 太喵了~~~~~ 还有中途相遇法这种东西的. 嗯 以后可以优化一些暴力 详情左转蓝书P58 (但可能我OI生涯中都遇不到正解是这个的题把...... 代码 #include ...
- uva1152 - 4 Values whose Sum is 0(枚举,中途相遇法)
用中途相遇法的思想来解题.分别枚举两边,和直接暴力枚举四个数组比可以降低时间复杂度. 这里用到一个很实用的技巧: 求长度为n的有序数组a中的数k的个数num? num=upper_bound(a,a+ ...
- LA 2965 中途相遇法
题目链接:https://vjudge.net/problem/UVALive-2965 题意: 有很多字符串(24),选出一些字符串,要求这些字符串的字母都是偶数次: 分析: 暴力2^24也很大了, ...
- 中途相遇法 解决 超大背包问题 pack
Description [题目描述] 蛤布斯有n个物品和一个大小为m的背包,每个物品有大小和价值,它希望你帮它求出背包里最多能放下多少价值的物品. [输入数据] 第一行两个整数n,m.接下来n行每行两 ...
- 紫书 例题8-3 UVa 1152(中途相遇法)
这道题要逆向思维, 就是求出答案的一部分, 然后反过去去寻找答案存不存在. 其实很多其他题都用了这道题目的方法, 自己以前都没有发现, 这道题专门考这个方法.这个方法可以没有一直往下求, 可以省去很多 ...
随机推荐
- Guid.NewGuid().ToString()的几种格式 (转)
1.Guid.NewGuid().ToString("N") 结果为: 38bddf48f43c48588e0d78761eaa1ce6 2.Guid.NewGuid() ...
- C++11之lambda表达式应用
应用 foreach语句中 #include <time.h> #include <algorithm> using namespace std; void func(int ...
- header元素 footer元素 hgroup元素
header元素 header元素是一种具有引航和导航作用的结构元素, 通常用来放置整个页面或页面内的一个内容区块的标题, 但是也可以包含其他内容, 例如数据表格,搜索表单, 或相关的logo图片 h ...
- IOS UILabel的一些使用小技巧
1. 你在iOS6的需要NSLineBreakByWordWrapping 为了您的代码试试这个: NSString *string = @"bla"; CGSize s = [s ...
- InstelliJ IDEA使用js+servlet+ajax入门
对于Ajax,我们先了解三点(完整的JS代码在后面) 一.Ajax的出现对javascript的影响. Ajax是微软提出的一种允许客户端脚本发送HTTP请求的技术(XMLHTTP),拯救了大多数ja ...
- 通过T4模板解决EF模型序列号的循环引用问题
在模型的T4模板(如model.tt)中插入如下代码,这样由模板生成的模型代码中的导航属性将自动带有[JsonIgnore]标识,不会被序列化 1. 添加命名空间的引用 找到以下代码,添加using ...
- 根据经纬度反向地理编译出地址信息(如果报错:Error Domain=kCLErrorDomain Code=8 "(null)")
注意:Error Domain=kCLErrorDomain Code=8 "(null)" 如果出现这个错误 一定是 经纬度有问题 一定是 经纬度有问题 一定是 经纬度有问 ...
- NET Core WordPress
NET Core 上运行的 WordPress 在.NET Core 上运行的 WordPress,无需安装PHP既可跨平台运行WordPress. 在Peachpie中实现PHP所需的功能数月后,现 ...
- 099 Recover Binary Search Tree 复原二叉搜索树
二叉排序树中有两个节点被交换了,要求把树恢复成二叉排序树. 详见:https://leetcode.com/problems/recover-binary-search-tree/submission ...
- docker postgresql FATAL: could not access private key file "/etc/ssl/private/ssl-cert-snakeoil.key": Permission denied
在docker中启动postgresql时出现错误 FATAL: could not access private key file "/etc/ssl/private/ssl-cert- ...