题目描述

已知N个正整数:A1、A2、……、An 。今要将它们分成M组,使得各组数据的数值和最平均,即各组的均方差最小。均方差公式如下:

输入输出格式

输入格式:

输入文件data.in包括:

第一行是两个整数,表示N,M的值(N是整数个数,M是要分成的组数)

第二行有N个整数,表示A1、A2、……、An。整数的范围是1--50。

(同一行的整数间用空格分开)

输出格式:

输出文件data.out包括一行,这一行只包含一个数,表示最小均方差的值(保留小数点后两位数字)。

输入输出样例

输入样例#1: 复制

6 3
1 2 3 4 5 6
输出样例#1: 复制

0.00

说明

样例解释:1和6、2和5、3和4分别为一组

【数据规模】

对于40%的数据,保证有K<=N <= 10,2<=K<=6

对于全部的数据,保证有K<=N <= 20,2<=K<=6

直接强上模拟退火

随机出每个位置在哪个地方

然后每次任意取出一个元素,加到最小的分组中

exp的设定就按套路来,用更新后的值减去之前的值

然后在BZOJ上T飞了

// luogu-judger-enable-o2
#include<cstdio>
#include<cmath>
#include<ctime>
#include<cstdlib>
#include<algorithm>
#include<cstring>
#define sqr(x) ((x)*(x))
const int MAXN = ;
const double eps = 1e-;
const int INF = 1e9 + ;
using namespace std;
inline int read() {
char c = getchar();int x = , f = ;
while(c < '' || c > '') {if(c == '-') f = -;c = getchar();}
while(c >= '' && c <= '') {x = x * + c - '';c = getchar();}
return x * f;
}
int N, M;
int belong[MAXN], a[MAXN];
double sum[MAXN], Aver = , Best = 1e20;
void MoNiTuiHuo() {
memset(sum, , sizeof(sum));
const double DeltaT = 0.99;
double ans = ;
for(int i = ; i <= N; i++) belong[i] = rand() % M + , sum[ belong[i] ] += a[i];
for(int i = ; i <= M; i++) ans += sqr(sum[i] - Aver);
for(double T = ; T > eps; T *= DeltaT) {
int P = min_element(sum + , sum + M + ) - sum;//找出最小的位置
int X = rand() % N + ;//这里直接随机就可以
double Pre = ans;
ans -= sqr(sum[ belong[X] ] - Aver) + sqr(sum[P] - Aver);
sum[ belong[X] ] -= a[X]; sum[P] += a[X];
ans += sqr(sum[ belong[X] ] - Aver) + sqr(sum[P] - Aver);
if((ans < Pre) || (exp( (ans-Pre)/T ) * RAND_MAX < rand() )) belong[X] = P;//以一定概率接受最优解
else ans = Pre, sum[ belong[X] ] += a[X], sum[P] -= a[X]; //不更新
}
if(ans < Best)
Best = ans;
}
int main() {
#ifdef WIN32
freopen("a.in", "r", stdin);
#endif
srand();
N = read(); M = read();
for(int i = ; i <= N; i++) a[i] = read(), Aver += a[i];
Aver /= M;
for(int i = ; i <= ; i++) MoNiTuiHuo();
printf("%.2lf",sqrt(Best / M));//因为y=sqrt(x)这个函数具有单调性,所以最后在开根就可以
return ;
}

洛谷P2503 [HAOI2006]均分数据(模拟退火)的更多相关文章

  1. 洛谷 P2503 [HAOI2006]均分数据 随机化贪心

    洛谷P2503 [HAOI2006]均分数据(随机化贪心) 现在来看这个题就是水题,但模拟赛时想了1个小时贪心,推了一堆结论,最后发现贪心做 不了, 又想了半个小时dp 发现dp好像也做不了,在随机化 ...

  2. P2503 [HAOI2006]均分数据

    P2503 [HAOI2006]均分数据 模拟退火+dp (不得不说,我今天欧气爆棚) 随机出1个数列,然后跑一遍dp统计 #include<iostream> #include<c ...

  3. bzoj2428 [HAOI2006]均分数据 模拟退火

    [HAOI2006]均分数据 Time Limit: 5 Sec  Memory Limit: 128 MBSubmit: 3434  Solved: 1091[Submit][Status][Dis ...

  4. BZOJ2428[HAOI2006]均分数据——模拟退火

    题目描述 已知N个正整数:A1.A2.…….An .今要将它们分成M组,使得各组数据的数值和最平均,即各组的均方差最小.均方差公式如下: ,其中σ为均方差,是各组数据和的平均值,xi为第i组数据的数值 ...

  5. HAOI2006 均分数据 [模拟退火]

    题目描述 已知N个正整数:A1.A2.--.An .今要将它们分成M组,使得各组数据的数值和最平均,即各组的均方差最小.均方差公式如下: 输入输出格式 输入格式: 输入文件data.in包括: 第一行 ...

  6. BZOJ 2428 JZYZOJ1533 : [HAOI2006]均分数据 模拟退火 随机化

    http://www.lydsy.com/JudgeOnline/problem.php?id=2428 http://172.20.6.3/Problem_Show.asp?id=1533 http ...

  7. bzoj2428: [HAOI2006]均分数据

    模拟退火.挺好理解的.然后res打成了ans一直WA一直WA...!!!一定要注意嗷嗷嗷一定要注意嗷嗷嗷一定要注意嗷嗷嗷. 然后我就一直卡一直卡...发现最少1800次的时候就可以出解了.然后我就去调 ...

  8. 洛谷 P2504 [HAOI2006]聪明的猴子

    洛谷 P2504 [HAOI2006]聪明的猴子 题目描述 在一个热带雨林中生存着一群猴子,它们以树上的果子为生.昨天下了一场大雨,现在雨过天晴,但整个雨林的地表还是被大水淹没着,部分植物的树冠露在水 ...

  9. bzoj 2428: [HAOI2006]均分数据 随机化

    2428: [HAOI2006]均分数据 Time Limit: 20 Sec  Memory Limit: 256 MB 题目连接 http://www.lydsy.com/JudgeOnline/ ...

随机推荐

  1. redis5.0新特性

    1. redis5.0新特性 1.1. 新的Stream类型 1.1.1. 什么是Stream数据类型 抽象数据日志 数据流 1.2. 新的Redis模块API:Timers and Cluster ...

  2. SpringCache实战遇坑

    1. SpringCache实战遇坑 1.1. pom 主要是以下两个 <dependency> <groupId>org.springframework.boot</g ...

  3. 浅谈 Nginx 的内部核心架构设计

    一.前言 Nginx---Ngine X,是一款免费的.自由的.开源的.高性能HTTP服务器和反向代理服务器:也是一个IMAP.POP3.SMTP代理服务器:Nginx以其高性能.稳定性.丰富的功能. ...

  4. vue 自学笔记记录

    vue 自学笔记(一): 知识内容:  安装vue ,创建vue实例,安装第一个组件,单项数据流 https://www.cnblogs.com/baili-luoyun/p/10763163.htm ...

  5. MYSQL服务器系统变量

    一:查看服务所有变量 MySQL服务器维护许多配置其操作的系统变量.每个系统变量都有一个默认值.可以使用命令行或选项文件中的选项在服务器启动时设置系统变量.其中大多数都可以在运行时使用动态更改 SET ...

  6. 内存管理-buddy[代码]

    基于2.6.32内核源码分析 首选内存区和gfp描述符关系运算 64位系统默认没有开启CONFIG_HIGHMEM选项,因此只有4个内存区DMA(0),DMA32(1),NORMAL(2),MOVAB ...

  7. 【log4j2】log4j的升级版log4j2的简单入门使用

    1.jar包 log4j-api.jar    +    log4j-core.jar maven仓库配置: <dependency> <groupId>org.apache. ...

  8. 我面试过没有上万人也有十几个,简历要这么写才有hr要你

    今天终于有时间好好给大家写写关于如何写简历,给自己加分了. 这篇文章拖了很久了应该说,本来想在上周写的,但是事情实在是太多,又不想草草了事,所以搁置到现在.今天早上正好空出来了,就马上给大家码出来了. ...

  9. getComputedStyle与currentStyle获取样式

    转载自:https://segmentfault.com/a/1190000007477785 CSS的样式分为三类: 内嵌样式:是写在标签里面的,内嵌样式只对所在的标签有效内部样式:是写在HTML里 ...

  10. 4-3 组件参数校验与非props特性

    本文参考脚本之家,https://www.jb51.net/article/143466.htm 通过属性的形式,父组件对子组件进行参数的传递 //如下图: //父组件设置content属性,向属性中 ...