bzoj 2428 均分数据 模拟退火
模拟退火
按照自己的思路打了,结果WA,发现退火最关键的就是初温,降温,和修改次数,
这个题还在外层带了一个循环,骚气
#include<cstdio>
#include<iostream>
#include<cstring>
#include<algorithm>
#include<cmath>
#define inf 0x3f3f3f3f3f3f3f3fll
using namespace std;
double av,ans,minn=inf,sum[30];
int n,m,a[30],be[30];
double Rand(){return (rand()%1000)/1000.0;}
void work(){
memset(sum,0,sizeof sum);
ans=0;
for(int i=1;i<=n;i++)
be[i]=rand()%m+1,sum[be[i]]+=a[i];
for(int i=1;i<=m;i++)
ans+=(sum[i]-av)*(sum[i]-av);
double t=10000;
while(t>0.1){
int x=rand()%n+1,y=be[x],z;
if(t>500)z=min_element(sum+1,sum+m+1)-sum;
else z=rand()%m+1;
double nxt=ans;
nxt-=(sum[y]-av)*(sum[y]-av);
nxt-=(sum[z]-av)*(sum[z]-av);
sum[y]-=a[x]; sum[z]+=a[x];
nxt+=(sum[y]-av)*(sum[y]-av);
nxt+=(sum[z]-av)*(sum[z]-av);
double dE=ans-nxt;
if(dE>0||exp(dE/t)>Rand())
ans=nxt,be[x]=z;
else
sum[y]+=a[x],sum[z]-=a[x];
t*=0.9;
}
if(ans<minn) minn=ans;
}
int main(){
srand(20001101);
scanf("%d%d",&n,&m);
for(int i=1;i<=n;i++){
scanf("%d",&a[i]);
av+=a[i];
}av/=m;
for(int i=1;i<=10000;i++)work();
printf("%0.2lf\n",sqrt(minn/m));
return 0;
}
bzoj 2428 均分数据 模拟退火的更多相关文章
- bzoj 2428 均分数据
题目大意: 已知N个正整数 将它们分成M组,使得各组数据的数值和最平均,即各组的均方差最小 求最小均方差 思路: 模拟退火 #include<iostream> #include<c ...
- bzoj2428 [HAOI2006]均分数据 模拟退火
[HAOI2006]均分数据 Time Limit: 5 Sec Memory Limit: 128 MBSubmit: 3434 Solved: 1091[Submit][Status][Dis ...
- BZOJ 2428 JZYZOJ1533 : [HAOI2006]均分数据 模拟退火 随机化
http://www.lydsy.com/JudgeOnline/problem.php?id=2428 http://172.20.6.3/Problem_Show.asp?id=1533 http ...
- 洛谷P2503 [HAOI2006]均分数据(模拟退火)
题目描述 已知N个正整数:A1.A2.…….An .今要将它们分成M组,使得各组数据的数值和最平均,即各组的均方差最小.均方差公式如下: 输入输出格式 输入格式: 输入文件data.in包括: 第一行 ...
- BZOJ2428[HAOI2006]均分数据——模拟退火
题目描述 已知N个正整数:A1.A2.…….An .今要将它们分成M组,使得各组数据的数值和最平均,即各组的均方差最小.均方差公式如下: ,其中σ为均方差,是各组数据和的平均值,xi为第i组数据的数值 ...
- HAOI2006 均分数据 [模拟退火]
题目描述 已知N个正整数:A1.A2.--.An .今要将它们分成M组,使得各组数据的数值和最平均,即各组的均方差最小.均方差公式如下: 输入输出格式 输入格式: 输入文件data.in包括: 第一行 ...
- P2503 [HAOI2006]均分数据
P2503 [HAOI2006]均分数据 模拟退火+dp (不得不说,我今天欧气爆棚) 随机出1个数列,然后跑一遍dp统计 #include<iostream> #include<c ...
- bzoj 2428: [HAOI2006]均分数据 && bzoj 3680 : 吊打XXX 模拟退火
每次把元素随便扔随机一个初始解,退火时每次随机拿一个元素扔到随机一个集合里,当温度高时因为状态不稳定扔到那个元素和最小的里边. 如果新解优,更新ans. 把原式拆一下,就可以用int存了. bzoj ...
- bzoj 2428: [HAOI2006]均分数据 随机化
2428: [HAOI2006]均分数据 Time Limit: 20 Sec Memory Limit: 256 MB 题目连接 http://www.lydsy.com/JudgeOnline/ ...
随机推荐
- Oracle表空间和表的常用操作指令
查看端口号指令 netstat –a 设置: set pagesize 100; //设置每页显示的行数set linesize 200; //设置每页显示的字符数 空格也算col 列名A for a ...
- Spring Cloud入门教程-Ribbon实现客户端负载均衡
简介 我们继续以之前博客的代码为基础,增加Ribbon组件来提供客户端负载均衡.负载均衡是实现高并发.高性能.可伸缩服务的重要组成部分,它可以把请求分散到一个集群中不同的服务器中,以减轻每个服务器的负 ...
- Oracle技术面试问题
这也许是你一直期待的文章,在关注这部分技术问题的同时,请务必阅读有关面试中有关个人的问题和解答.这里的回答并不是十分全面,这些问题可以通过多个 角度来进行解释,也许你不必在面试过程中给出完全详尽的答案 ...
- JTA 原理分析
JTA 深度历险 - 原理与实现 在 J2EE 应用中,事务是一个不可或缺的组件模型,它保证了用户操作的 ACID(即原子.一致.隔离.持久)属性.对于只操作单一数据源的应用,可以通过本地资源接口实现 ...
- python---生成器、迭代器
# -*- coding:utf-8 -*- # LC # 列表生成式 def func(x): print(x) return 2*x print([ func(i) for i in range( ...
- How to change from default to alternative Python version on Debian Linux
https://linuxconfig.org/how-to-change-from-default-to-alternative-python-version-on-debian-linux You ...
- JAVAEE——BOS物流项目13:Quartz入门案例、核心概念、cron 表达式的格式(了解)
1.quartz入门案例 本入门案例基于spring和quartz整合完成. 第一步:创建maven工程,导入spring和quartz相关依赖 第二步:创建任务类 第三步:在spring配置文件中配 ...
- 用js来实现那些数据结构16(图02-图的遍历)
上一篇文章我们简单介绍了一下什么是图,以及用JS来实现一个可以添加顶点和边的图.按照惯例,任何数据结构都不可或缺的一个point就是遍历.也就是获取到数据结构中的所有元素.那么图当然也不例外.这篇文章 ...
- 学习了解CyclicBarrier
CyclicBarrier我的理解就是一个线程等待器,用途就是将注册了这个barrier的线程卡在同一个位置,直到注册这个barrier的所有线程都完成之后,继续执行.下面是一个学习过程中采用的示例, ...
- vscode 停用插件自动更新