题目描述

已知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. JDK8 新增的日期时间API

    背景 JDK8中增加了一套全新的日期时间API,这里进行总结下,方便查询使用. 新的时间及日期API位于 java.time 包中,下面是一些关键类. Instant:代表的是时间戳. LocalDa ...

  2. SpringMVC核心接口

    简单配置SpringMVC SpringMVC的实现原理是通过Servlet拦截所有URL达到控制目的,所以web.xml的配置是必须的 ContextLoaderListener ContextLo ...

  3. 一些能体现个人水平的SQL语句[总结篇]

    作为一名小小的开发人员,刚入门的时候觉得很难,过了一段时间之后,发现很简单,很快就可以搞定很bug了.然而这并不能说明你就已经很牛掰了,只能说,你不了解其他太多的东西.应该说,数据库有几个共同的命令, ...

  4. Mybatis优缺点

    优点:SQL写在XML中,便于统一管理和优化 提供映射标签,支持对象和数据库的orm字段关系映射 可以对SQL进行优化      缺点: SQL工作量大 mybagtis移植姓不好 不支持级联

  5. Java核心技术及面试指南 面向对象部分的面试题总结以及答案

    问题2.7.1,开放性问题,说一下你对面向对象思想的了解. 要点1,先说基础概念,比如面向对象思想包括封装.继承.多态,然后说些语法,比如可以通过extends继承类.通过implement来实现接口 ...

  6. error) DENIED Redis is running in protected mode because protected mode is enabled报错

    官网地址:https://redis.io/download 官方安装文档如下: Installation Download, extract and compile Redis with: $ wg ...

  7. [ASP.NET MVC]笔记(四) UnobtruSive AJAX和客户端验证

    UnobtruSive AJAX和客户端验证 ASP.NET MVC 已经默认开启非侵入试js和客户端验证,在web.config可以看到如下配置: <configuration> < ...

  8. jvm详情——6、堆大小设置简单说明

    年轻代的设置很关键JVM中最大堆大小有三方面限制:相关操作系统的数据模型(32-bt还是64-bit)限制:系统的可用虚拟内存限制:系统的可用物理内存限制.32位系统下,一般限制在1.5G~2G:64 ...

  9. 使用Python进行并发编程

    让计算机程序并发的运行是一个经常被讨论的话题,今天我想讨论一下Python下的各种并发方式. 并发方式 线程(Thread) 多线程几乎是每一个程序猿在使用每一种语言时都会首先想到用于解决并发的工具( ...

  10. 【Go】go get 自动代理

    原文链接:https://blog.thinkeridea.com/201903/go/go_get_proxy.html 最近发现技术交流群里很多人在询问 go get 墙外包失败的问题,大家给了很 ...