我真是*了狗了

随机数种子被卡了 我也是醉了 什么给T分段什么的 做几万次模拟退火什么的 根本想不到啊QAQ

一晚上就被这些鬼模拟退火虐过去了

#include<cstdio>
#include<algorithm>
#include<cstring>
#include<iostream>
#include<queue>
#include<cmath>
#define PF printf
#define SF scanf
using namespace std;
typedef long long LL;
const int MAXN = 20;
double Min, ave, ans = 1e30;
int n, m;
int A[MAXN+10], group[MAXN+10];
double sum[MAXN+10];
inline double Rand() {return rand() % 10000 / 10000;
}
inline int find_min() {int MIN = 1234567890, p;for(int i = 1; i <= m; i++) if(sum[i] < MIN) MIN = sum[i], p = i;return p;
}
void SA(int T) {memset(sum, 0, sizeof(sum));for(int i = 1; i <= n; i++) {group[i] = rand() % m + 1;sum[group[i]] += A[i];}double Now = 0, New;for(int i = 1; i <= m; i++) Now += (sum[i] - ave) * (sum[i] - ave);while(T > 0.1) {T *= 0.9;int x = rand() % n + 1, from = group[x], to;if(T > 500) to = find_min();else to = rand() % m + 1;if(from == to) continue;New = Now;New -= (sum[from] - ave) * (sum[from] - ave) + (sum[to] - ave) * (sum[to] - ave);sum[from] -= A[x]; sum[to] += A[x];New += (sum[from] - ave) * (sum[from] - ave) + (sum[to] - ave) * (sum[to] - ave);double dE = Now - New;if(dE > 0 || rand() % 10000 <= T) {Now = New; group[x] = to;}else {sum[from] += A[x]; sum[to] -= A[x];}ans = min(ans, Now);T *= 0.97;}}
int main() {srand(23333333);SF("%d%d", &n, &m);for(int i = 1; i <= n; i++) SF("%d", &A[i]), ave += A[i];ave /= 1.0 * m;for(int i = 1; i <= 20000; i++) SA(10000);PF("%.2f", sqrt(ans/m));
}

[BZOJ2428] [HAOI2006]均分数据 模拟退火相关推荐

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

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

  2. 洛谷P2503 [HAOI2006]均分数据(模拟退火)

    题目描述 已知N个正整数:A1.A2.--.An .今要将它们分成M组,使得各组数据的数值和最平均,即各组的均方差最小.均方差公式如下: 输入输出格式 输入格式: 输入文件data.in包括: 第一行 ...

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

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

  4. [HAOI2006]均分数据

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

  5. bzoj 2428: [HAOI2006]均分数据

    Description Solution 对于一种确定的排列,我们可以用 \(O(n^2*k)\) 的 \(DP\) 算出最优划分的方法 但是排列需要枚举,我们可以考虑退火 每一次交换两个元素,跑一边 ...

  6. excel数据平均分配给多人_excel表格 怎样均分数据-用Excel怎么才能将组数据平均分配给几个人...

    怎样在Excel表格中求平均数? 在excel中怎样自动生成各班各科的平均成绩 可以调用Excel函数库的函实现. 步骤如下: 1.  在单元格内点击上公式-平均值". 2.  点击需要参与 ...

  7. 重走长征路---OI每周刷题记录---12月6日 2014

    总目录详见https://blog.csdn.net/mrcrack/article/details/84471041 做题原则,找不到测评地址的题不做.2018-11-28 重走长征路---OI每周 ...

  8. AcWing进阶算法课Level-4 第六章 搜索 (模拟退火,爬山)

    AcWing进阶算法课Level-4 第六章 搜索 模拟退火 AcWing 3167. 星星还是树110人打卡 AcWing 2424. 保龄球78人打卡 AcWing 2680. 均分数据72人打卡 ...

  9. 如何在内存中存储有序数据?

    目前有很多种不同的数据结构可以在内存中存储有序的数据.在分布式数据库的存储引擎中,有一种结构因其简单而被广泛地使用,那就是跳表(SkipList). 跳表的优势在于其实现难度比简单的链表高不了多少,但 ...

最新文章

  1. 40个出色的Wordpress cms插件
  2. python如何下载zip文件_使用python-mechaniz下载zip文件
  3. data spring 指定时区_SpringBoot 统一时区的方案
  4. Android中适用于ListView、GridView等组件的通用Adapter
  5. charles 如何抓取web界面的包
  6. 电路中的这些符号标识,你真的明白吗?
  7. 危险!!!也许你的web网站或服务正在悄无声息地被SQL注入
  8. Spring Boot笔记-@ExceptionHandler拦截500服务器错误自定义数据回前端
  9. vpx计算机论文,vpx总线
  10. reactjs安装并在脚手架中使用 material-ui/core
  11. 圈子圈套 pdf_名字叫什么? 如何圈套好域名
  12. 达梦8用户和角色管理
  13. 默默学Sharding-Sphere(一)
  14. linux开机dracut界面_linux开机启动步骤详解
  15. HDU2370——Convert Kilometers to Miles
  16. Qt Creator配置Yocto交叉编译环境——简洁篇
  17. C++调用PHP程序
  18. Python能用来做什么?以下是Python的三大主要用途
  19. Leetcode刷题986. 区间列表的交集
  20. Arcgis For Android 加载天地图(拥有缓存功能)

热门文章

  1. 《老路用得上的商学课》11-20章学习笔记
  2. Android之TelephonyManager类的方法详解
  3. 万亿级企业移动市场:为何说金蝶云之家吃准了?
  4. B/C混搭卖出天价的Linkedin,对中国的金蝶云之家们有什么启示?
  5. 编写java程序用用于显示人姓名和年龄
  6. 易语言注册机原理介绍
  7. 四元数非正式笔记梳理_Quaternion kinematics for the error-state Kalman filter
  8. Bend Radius—How It Can Impact Your Cable Performance?
  9. 如何从脚本小子变成黑客大神?
  10. 不需要网络的调频收音机_山进WR50/P蓝牙、中波、调频台式收音机评测