【bzoj3680】平衡点 模拟退火
模拟退火是一种求函数最值问题的随机算法。
给定一个函数的某一初始坐标,可以拟定一个“温度”(这里主要是借用退火的物理意义),这里的温度可以理解成自变量可以取值的范围。之后在当前最优解对应的自变量的基础上,随机产生一组附加量,用当前自变量加上附加量构成一个新的点,计算该点的函数值,若该点函数值比最优解还要优,则接受该情况,同时最优解和其对应的自变量坐标也跟着改变;若该点函数值没有最优解优,则以一定概率接受它,避免无法跳出函数极值点而非最值点,这个接受的概率表示为\(e^{(+-)\Delta},\Delta=f_1-f_2\),若这个值大于随机生成的概率,则接受并更新这个值,否则不接受。如此往复迭代,当最优解出现的区间范围足够小时(T温度降到接近0时),结束迭代,得出的值就可能是最优解。
(粗体为该算法用到概率的地方)
代码如下
#include <bits/stdc++.h>
using namespace std;
const int maxn=1010;
const double eps=1e-15;//精度
const double d=0.998;//降温幅度
struct node{
double x,y,w;
}p[maxn];
int n;
double ansx,ansy,t;
inline double calc(double x,double y){
double tot=0;
for(int i=1;i<=n;i++){
double dx=x-p[i].x,dy=y-p[i].y;
tot+=sqrt(dx*dx+dy*dy)*p[i].w;
}
return tot;
}
void SA(){
double T=200;
while(T>eps){
double nowx=ansx+(2*rand()-RAND_MAX)*T;//随机生成新坐标
double nowy=ansy+(2*rand()-RAND_MAX)*T;
double delta=calc(nowx,nowy)-calc(ansx,ansy);
if(delta<0)ansx=nowx,ansy=nowy;
else if(exp(-delta/t)*RAND_MAX>rand())ansx=nowx,ansy=nowy;//以一定概率接受
T*=d;
}
}
int main(){
srand((unsigned int)time(0));
scanf("%d",&n);
for(int i=1;i<=n;i++){
scanf("%lf%lf%lf",&p[i].x,&p[i].y,&p[i].w);
ansx+=p[i].x,ansy+=p[i].y;
}
ansx/=(double)n,ansy/=(double)n;
SA();
printf("%.3lf %.3lf\n",ansx,ansy);
return 0;
}
【bzoj3680】平衡点 模拟退火的更多相关文章
- NOIP前刷题记录
因为本蒻实在太蒻了...对于即将到来的NOIP2018ssfd,所以下决心要把自己近期做过的题目(衡量标准为洛谷蓝题难度或以上)整理一下,归归类,简单地写一下思路,就当作自己复习了吧qwq 本随笔持续 ...
- NOIP刷题
搜索 [NOIP2013]华容道 最短路+带剪枝的搜索,是一个思维难度比较大的题目. CF1064D Labyrinth 考虑贪心,用双向队列bfs [NOIP2017]宝藏 剪枝搜索出奇迹 题解:h ...
- [luogu1337][bzoj3680][JSOI2004]平衡点 / 吊打XXX【模拟退火】
题目描述 gty又虐了一场比赛,被虐的蒟蒻们决定吊打gty.gty见大势不好机智的分出了n个分身,但还是被人多势众的蒟蒻抓住了.蒟蒻们将n个gty吊在n根绳子上,每根绳子穿过天台的一个洞.这n根绳子有 ...
- 【Luogu1337】平衡点(模拟退火)
[Luogu1337]平衡点(模拟退火) 题面 洛谷 题解 和BZOJ3680吊打XXX是一样的.. 但是数据很强呀.. 疯狂调参 各种WA... 很无奈呀.... #include<iostr ...
- [JSOI2004]平衡点/[BZOJ3680]吊打XXX
[JSOI2004]平衡点/[BZOJ3680]吊打XXX 题目大意: 有\(n(n\le10000)\)个重物,每个重物系在一条足够长的绳子上.每条绳子自上而下穿过桌面上的洞,然后系在一起.假设绳子 ...
- 【BZOJ3680】吊打XXX(模拟退火)
[BZOJ3680]吊打XXX(模拟退火) 题面 BZOJ 题解 模拟退火... 就是模拟退火 然后这题有毒 各种调参数之后终于\(AC\)了.. 这种题就是玄学呀... 温度要调大 最后跑完还要向四 ...
- 模拟退火小结(Bzoj3680:吊打xxx)
简介 就是模拟退火的物理过程,每次随机逼近乘上温度,以\(e^{\Delta/T}\)的概率接受答案,随机一个概率比较 然后就是调参+乱搞 题目 Bzoj3680:吊打xxx 代码 # include ...
- 洛谷P1337 [JSOI2004]平衡点 / 吊打XXX(模拟退火)
题目描述 如图:有n个重物,每个重物系在一条足够长的绳子上.每条绳子自上而下穿过桌面上的洞,然后系在一起.图中X处就是公共的绳结.假设绳子是完全弹性的(不会造成能量损失),桌子足够高(因而重物不会垂到 ...
- 洛谷P1337 【[JSOI2004]平衡点 / 吊打XXX】(模拟退火)
洛谷题目传送门 很可惜,充满Mo力的Mo拟退火并不是正解.不过这是一道最适合开始入手Mo拟退火的好题. 对模拟退火还不是很清楚的可以看一下 这道题还真和能量有点关系.达到平衡稳态的时候,物体的总能量应 ...
随机推荐
- 百度之星-day1-1003-度度熊剪纸条
度度熊剪纸条 Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/65536 K (Java/Others)Total Subm ...
- Week 7 迭代总结
写在前面: 本次我为团队博客写了一篇总结,深刻总结了我们组发生的问题以及将来要做的事情.有兴趣请移步http://www.cnblogs.com/Buaa-software Week 7 Alpha轮 ...
- Linux课题实践三——程序破解
2.3 程序破解 20135318 刘浩晨 1. 掌握NOP.JNE.JE.JMP.CMP汇编指令的机器码 NOP:NOP指令即“空指令”.执行到NOP指令时,CPU什么也不做,仅仅当做一 ...
- Find Amir CodeForces - 805C (贪心+思维)
A few years ago Sajjad left his school and register to another one due to security reasons. Now he w ...
- Knowledge-Defined Networking
知识定义的网络(Knowledge-Defined Networking) 来源:ACM SIGCOMM Computer Communication Review 年份:2017 是什么:容纳和利用 ...
- PHP常用类------生成验证码类Code
直接附上代码吧!很简单的代码,写一遍基本就会了,主要明白用GD库画图的几个步骤: 1.先创建画布,不然画在哪儿?(imagecreatetruecolor)2.根据要画的数据,选定颜色 (imagec ...
- ASP.NET MVC随记汇总
1.学习教程: 1.ASP.NET MVC4入门教程:Asp.Net MVC4入门指南 2.ASP.NET MVC4系类教程 3.ASP.NET MVC学习系列 4.从零开始学习ASP.NET MVC ...
- RAID 磁盘阵列说明
Copy From wiki RAID档次 最少硬盘 最大容错 可用容量 读取性能 写入性能 安全性 目的 应用产业 单一硬盘 (引用) 0 1 1 1 无 JBOD 1 0 n 1 1 无( ...
- 解决因为本地代码和远程代码冲突,导致git pull无法拉取远程代码的问题
一.问题 当本地代码和远程代码有冲突的时候,执行git pull操作的时候,会提示有冲突,然后直接终止本次pull,查了些资料没有找到强制pull的方式,但是可以使用如下方式解决. 二.解决思路 可以 ...
- doc.update
db.collection('todos').doc('todo-identifiant-aleatoire').update({ // data 传入需要局部更新的数据 data: { // 表示将 ...