【BZOJ2428】[HAOI2006]均分数据
Description
已知N个正整数:A1、A2、……、An 。今要将它们分成M组,使得各组数据的数值和最平均,即各组的均方差最小。均方差公式如下:
,其中σ为均方差,是各组数据和的平均值,xi为第i组数据的数值和。
Input
Output
这一行只包含一个数,表示最小均方差的值(保留小数点后两位数字)。
Sample Input
1 2 3 4 5 6
Sample Output
HINT
对于全部的数据,保证有K<=N <= 20,2<=K<=6
#include<iostream>
#include<cstdio>
#include<cstring>
#include<cmath>
#include<ctime>
#include<cstdlib>
#include<algorithm>
using namespace std;
int n,m,sum1;
int a[],grp[];
double sum[],tmp,minn=,ave=;
double sqr(double x)
{
return x*x;
}
void solve(){
memset(sum,,sizeof(sum));tmp=;
for (int i=;i<=n;i++) grp[i]=rand()%m+;
for (int i=;i<=n;i++) sum[grp[i]]+=a[i];
for (int i=;i<=m;i++) tmp+=sqr(sum[i]-ave);
double T=;
while (T>0.1){
T*=0.9;
int t=rand()%n+,x=grp[t],y;
if (T>) y=min_element(sum+,sum+m+)-sum;
else y=rand()%m+;
if (x==y) continue;
double last=tmp;
tmp-=sqr(sum[x]-ave);tmp-=sqr(sum[y]-ave);
sum[x]-=a[t];sum[y]+=a[t];
tmp+=sqr(sum[x]-ave);tmp+=sqr(sum[y]-ave);
if (rand()%>T&&tmp>last) sum[x]+=a[t],sum[y]-=a[t],tmp=last;
else grp[t]=y;
}
minn=min(minn,tmp);
} int main(){
scanf("%d%d",&n,&m);
for (int i=;i<=n;i++)scanf("%d",&a[i]),
sum1+=a[i],swap(a[i],a[rand()%i+]);
ave=(sum1+0.0)/m;
for (int i=;i<=;i++)
solve();
printf("%.2lf\n",sqrt(minn/m));
}
【BZOJ2428】[HAOI2006]均分数据的更多相关文章
- bzoj2428: [HAOI2006]均分数据
模拟退火.挺好理解的.然后res打成了ans一直WA一直WA...!!!一定要注意嗷嗷嗷一定要注意嗷嗷嗷一定要注意嗷嗷嗷. 然后我就一直卡一直卡...发现最少1800次的时候就可以出解了.然后我就去调 ...
- bzoj2428 [HAOI2006]均分数据 模拟退火
[HAOI2006]均分数据 Time Limit: 5 Sec Memory Limit: 128 MBSubmit: 3434 Solved: 1091[Submit][Status][Dis ...
- BZOJ2428[HAOI2006]均分数据——模拟退火
题目描述 已知N个正整数:A1.A2.…….An .今要将它们分成M组,使得各组数据的数值和最平均,即各组的均方差最小.均方差公式如下: ,其中σ为均方差,是各组数据和的平均值,xi为第i组数据的数值 ...
- BZOJ2428 HAOI2006均分数据(模拟退火)
显然可以状压dp.显然过不了. 考虑暴力模拟退火.每次随机改变一个数所属集合即可. 并不明白要怎么调参. #include<iostream> #include<cstdio> ...
- 【BZOJ2428】均分数据(模拟退火)
[BZOJ2428]均分数据(模拟退火) 题面 BZOJ 题解 先说说黄学长的做法: 当温度比较高的时候,贪心 每次随机一个数,把他放进当前和最少的那一组里面 温度足够低的时候就完全随机然后转移 这样 ...
- P2503 [HAOI2006]均分数据
P2503 [HAOI2006]均分数据 模拟退火+dp (不得不说,我今天欧气爆棚) 随机出1个数列,然后跑一遍dp统计 #include<iostream> #include<c ...
- bzoj 2428: [HAOI2006]均分数据 随机化
2428: [HAOI2006]均分数据 Time Limit: 20 Sec Memory Limit: 256 MB 题目连接 http://www.lydsy.com/JudgeOnline/ ...
- 洛谷 P2503 [HAOI2006]均分数据 随机化贪心
洛谷P2503 [HAOI2006]均分数据(随机化贪心) 现在来看这个题就是水题,但模拟赛时想了1个小时贪心,推了一堆结论,最后发现贪心做 不了, 又想了半个小时dp 发现dp好像也做不了,在随机化 ...
- BZOJ2428:[HAOI2006]均分数据——题解
https://www.lydsy.com/JudgeOnline/problem.php?id=2428 https://www.luogu.org/problemnew/show/P2503 已知 ...
随机推荐
- 【分割圆】Uva 10213 - How Many Pieces of Land ?
一个椭圆上有N个点,将这n个点两两相连,问最多能将这个椭圆分成多少片. 理清思路,慢慢推. 首先我们要想到欧拉公式:V+E-F=2 其中V为图上的顶点数,E为边数,F为平面数. 计算时的可以枚举点,从 ...
- Hashtable 和 HashMap 的比较
Hashtable HashMap 并发操作 使用同步机制, 实际应用程序中,仅仅是Hashtable本身的同步并不能保证程序在并发操作下的正确性,需要高层次的并发保护. 下面的代码试图在ke ...
- 写css动画
<!doctype html><html lang="en"> <head> <meta charset="UTF-8" ...
- React History
1. browerhistory 1. 推荐使用, 2. nginx服务器要配置try-file,当找不到路由时跳转到首页 3. 使用浏览器history对象,不再允许直接访问nn 所以不能直接拷贝地 ...
- css图片映射
a <div class="imagemap"> <img src="img/map.png" width="496px" ...
- python学习day2--python基础
python没有常量的定义方式,一般常量可人为用全部大写字母来表示. 如: MYSQL_CONNECTION='192.168.10.2' 以os库为例: import os os.system('i ...
- .net转java了
公司技术部门 要求.net全体转向java 本来要看看.net core的 看来是没必要了 现在国内互联网公司.net是越来越少 不知道为何会这样 不过java的生态圈 确实是很强大 也很丰富 ...
- ios开发:代理设计模式
代理是一种简单而功能强大的设计模式,这种模式用于一个对象“代表”另外一个对象去做和实现一些东西. 主对象维护一个代理(delegate)的引用并且在合适的时候向这个代理发送消息,这个消息通知“代理”对 ...
- 自定义DZLMoneyLabel
一.简介 由于父亲生病,好久没有更新博客了,今天10.1 国庆(应该说是昨天了,已经过了12点了),心血来潮自定义了一个小label.这个控件的难度并不大,也没有什么可以值得炫耀的技术点.写这个控件的 ...
- 学习之spring属性文件注入
package com.my.proper; import org.springframework.beans.factory.annotation.Value; import org.springf ...