题目描述

已知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 = 31;
const double eps = 1e-15;
const int INF = 1e9 + 10;
using namespace std;
inline int read() {char c = getchar();int x = 0, f = 1;while(c < '0' || c > '9') {if(c == '-') f = -1;c = getchar();}while(c >= '0' && c <= '9') {x = x * 10 + c - '0';c = getchar();}return x * f;
}
int N, M;
int belong[MAXN], a[MAXN];
double sum[MAXN], Aver = 0, Best = 1e20;
void MoNiTuiHuo() {memset(sum, 0, sizeof(sum));const double DeltaT = 0.99;double ans = 0;for(int i = 1; i <= N; i++) belong[i] = rand() % M + 1, sum[ belong[i] ] += a[i];for(int i = 1; i <= M; i++) ans += sqr(sum[i] - Aver);for(double T = 10000; T > eps; T *= DeltaT) {int P = min_element(sum + 1, sum + M + 1) - sum;//找出最小的位置 int X = rand() % N + 1;//这里直接随机就可以 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 WIN32freopen("a.in", "r", stdin);#endifsrand(19260817);N = read(); M = read();for(int i = 1; i <= N; i++) a[i] = read(), Aver += a[i];Aver /= M;for(int i = 1; i <= 1000; i++) MoNiTuiHuo();printf("%.2lf",sqrt(Best / M));//因为y=sqrt(x)这个函数具有单调性,所以最后在开根就可以 return 0;
}

洛谷P2503 [HAOI2006]均分数据(模拟退火)相关推荐

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

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

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

    我真是*了狗了 随机数种子被卡了 我也是醉了 什么给T分段什么的 做几万次模拟退火什么的 根本想不到啊QAQ 一晚上就被这些鬼模拟退火虐过去了 #include<cstdio> #incl ...

  3. 动态生成洛谷个人练习/估值数据

    最近有人问我怎么才能动态生成洛谷个人练习/估值数据,下面给大家讲一下 首先打开Google Chrome浏览器,输入网址 http://luogu.wao3.cn/ 输入自己的洛谷UID 然后调试选项 ...

  4. BZOJ.2428.[HAOI2006]均分数据(随机化贪心/模拟退火)

    题目链接 模拟退火: 模拟退火!每次随机一个位置加给sum[]最小的组. 参数真特么玄学啊..气的不想调了(其实就是想刷刷最优解) 如果用DP去算好像更准.. //832kb 428ms #inclu ...

  5. 洛谷——P2341 [HAOI2006]受欢迎的牛//POJ2186:Popular Cows

    P2341 [HAOI2006]受欢迎的牛/POJ2186:Popular Cows 题目背景 本题测试数据已修复. 题目描述 每头奶牛都梦想成为牛棚里的明星.被所有奶牛喜欢的奶牛就是一头明星奶牛.所 ...

  6. 洛谷P2341 [HAOI2006]受欢迎的牛 (Tarjan,SCC缩点)

    P2341 [HAOI2006]受欢迎的牛|[模板]强连通分量 https://www.luogu.org/problem/P2341 题目描述 每头奶牛都梦想成为牛棚里的明星.被所有奶牛喜欢的奶牛就 ...

  7. [HAOI2006]均分数据

    题解 今天下午刚学了模拟退火 借这个题来总结下模拟退火的要注意的问题吧 1 : \(eps\)不要设的太大 2 : 初温\(T\)在2000左右就差不多可以了 3 : 注意题目要求是要求最大值还是最小 ...

  8. 洛谷P2502:[HAOI2006]旅行

    题目描述 Z小镇是一个景色宜人的地方,吸引来自各地的观光客来此旅游观光.Z小镇附近共有N个景点(编号为1,2,3,-,N),这些景点被M条道路连接着,所有道路都是双向的,两个景点之间可能有多条道路.也 ...

  9. 洛谷 P2341 [HAOI2006]受欢迎的牛

    题目 题目背景 本题测试数据已修复. 题目描述 每头奶牛都梦想成为牛棚里的明星.被所有奶牛喜欢的奶牛就是一头明星奶牛.所有奶 牛都是自恋狂,每头奶牛总是喜欢自己的.奶牛之间的"喜欢" ...

最新文章

  1. 【算法】算法 第四版 练习题的解法
  2. linux安装jetty部署war包,jetty部署war包
  3. 惠普10亿美元锻造Helion云品牌
  4. js-ajax-04
  5. cubieboard 将linux debian 系统灌入Nand中的操作记录
  6. 无国界医生_如何在5分钟内创建无国界风格的技能树
  7. php分布式缓存系统 Memcached 入门
  8. requests模块爬取糗事百科用xpath解析
  9. BZOJ1096-[ZJOI2007]仓库建设
  10. php载入内存的是本地代码吗,常量和静态变量会先载入内存后在进行执行php代码...
  11. 【linux笔记】vi和vim编辑器,重定向输出,系统命令,进程,管道
  12. bigint hive java类型_【干货】Hive常用函数大全
  13. ROS Bridge 笔记(02)— carla_ros_bridge 功能包(准备 ROS环境、运行 ROS Bridge、配置 CARLA 参数、同步模式下使用 ROS Bridge、主车辆控制)
  14. 张一鸣宣布卸任字节跳动CEO!
  15. leetcode刷面试题(面试题08合集)
  16. 切比雪夫不等式例题讲解_14.初中数学:怎么求k的值?解一元一次不等式,基础常考题型...
  17. python正则表达式匹配数字和字母_只能输入数字和字母组合的正则表达式怎么写?...
  18. 两个常用的功能,将shp数据属性转成TXT和Excel
  19. 8核和16核服务器性能差异,intel再次科普:8核处理器玩游戏最好,16核真心没必要...
  20. 测U盘实际容量 (缩水U盘、扩容盘、假U盘)

热门文章

  1. SAP WM初阶之LX09查询TR List
  2. SAP QM QS41 试图维护Catalog为3的Code Group, 报错-You need to maintain catalog 3 (Usage Decisions) in Customi
  3. 从主数据的角度看一个零售ERP系统
  4. “上海名媛群”事件,我来说几句
  5. SAP SD 常用表
  6. CBNet:物体检测的一种新的组合主干网络结构
  7. 国产光刻设备第一股:从官司缠身到国产希望?
  8. 波士顿动力的仓库机器人Strentch来了,挑战每小时搬运800个箱子
  9. 盘点|应用落地,构建城市“大脑”
  10. 北大发布最新《图神经网络推荐系统》2020综述论文,27页pdf