【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 已知 ...
随机推荐
- The _imageingft C module is not installed
遇到的问题如图所示,使用的方法: 下载地址:http://effbot.org/downloads 并没有解决,有人用这样的方法成功了,只能说很遗憾,我并没有成功 大神给的解决办法,不要再win平台下 ...
- MapReduce的方式进行HBase向HDFS导入和导出
附录代码: HBase---->HDFS import java.io.IOException; import org.apache.hadoop.conf.Configuration; imp ...
- [设计模式]<<设计模式之禅>>关于单例模式
1 我是皇帝我独苗 自从秦始皇确立了皇帝这个位置以后,同一时期基本上就只有一个人孤零零地坐在这个位置.这种情况下臣民们也好处理,大家叩拜.谈论的时候只要提及皇帝,每个人都知道指的是谁,而不用在皇帝前 ...
- [未完成]关于POI的使用
关于POI的使用关于POI的使用关于POI的使用关于POI的使用
- Bootstrap ACE后台管理界面模板-jquery已整理
做后台通用模板,基于bootstrap,jquery写成的模板,非常齐全.国内不能正常访问google我将不能访问的jquery替换成cdn.bootcss.com网站下的jquery 链接: htt ...
- ajax开发模拟后端数据接口
在做前端开发的时候,特别是一些业务逻辑集中在前端的开发中.我们经常需要自己来模拟获取到后台接口的数据.为什么要模拟?可能后台接口还没有开发完成,可能后台还没有数据返回,可能...等等原因.曾经,我也尝 ...
- c++ 11 国标标准方面的异常处理与微软在Visual Studio 2012的异常处理的区别
这段代码: __try { } __except(GetErrorCode()) { } 可以捕获空指针,但是包围在其中的代码不能有自带析构函数的对象.c++ 11 标准里面的auto_ptr关键字, ...
- 如何让Asp.net webAPI返回JSON格式数据
ASP.NET Web API 是新一代的 HTTP 網路服務開發框架,除了可以透過 Visual Studio 2012 快速開發外 (內建於 ASP.NET MVC 4 的 Web API 專案範 ...
- Object-C基础学习笔记(1)
1.苹果公司将Cocoa.Carbon.QuickTime和OpenGL等技术作为框架集:提供Cocoa组成部分有: (1)Foundation框架(有很多有用的,面向数据的低级类和数据结构): (2 ...
- C#中委托和事件的区别实例解析
这篇文章主要介绍了C#中委托和事件的区别,并分别以实例形式展示了通过委托执行方法与通过事件执行方法,以及相关的执行流程与原理分析,需要的朋友可以参考下 本文实例分析了C#中委托和事件的区别,分享给大家 ...