【POJ】2420 A Star not a Tree?(模拟退火)
题目
传送门:QWQ
分析
军训完状态不好QwQ,做不动难题,于是就学了下模拟退火。
之前一直以为是个非常nb的东西,主要原因可能是差不多省选前我试着学一下但是根本看不懂?
骗分利器,但据说由于调参困难,很多情况比不上多点爬山?
总体来说模拟退火的精髓就是:
可以看到T越大,转移的概率越高。 exp是在cmath里面有的,直接用就ok。
本题就是找出n个点的费马点,即找出一个点到这n个点的距离和最小。
代码
// #include <bits/stdc++.h>
// POJ 2420
#include <cstdio>
#include <cmath>
#include <cstdlib>
#include <ctime>
using namespace std;
const int maxn=;
const double pace=0.95;
struct Point { double x,y; }; int n;
Point p[maxn]; double sqr(double x){ return x*x; }
double dis(double x,double y,Point a){ return sqrt(sqr(x-a.x)+sqr(y-a.y)); }
double getnum(double x,double y){
double ans=;
for(int i=;i<=n;i++) ans+=dis(x,y,p[i]);
return ans;
}
int main(){
// srand(time(NULL));
srand();
Point ans;
scanf("%d",&n);
for(int i=;i<=n;i++) {
scanf("%lf%lf",&p[i].x,&p[i].y);
ans.x+=p[i].x; ans.y+=p[i].y;
}
ans.x/=n; ans.y/=n;
double t=1e5, end=0.02, pre=getnum(ans.x,ans.y);
while(t>end){ double xx=, yy=;
t*=pace;
for(int i=;i<=n;i++){
xx+=(p[i].x-ans.x)/dis(ans.x,ans.y,p[i]);
yy+=(p[i].y-ans.y)/dis(ans.x,ans.y,p[i]);
}
double tmp=getnum(ans.x+xx*t,ans.y+yy*t);
if(tmp<pre){
pre=tmp; ans.x+=xx*t; ans.y+=yy*t;
}
else if(exp((pre-tmp)/t)>(rand()%)/10000.0){
ans.x+=xx*t; ans.y+=yy*t;
}
t*=pace;
}
printf("%.0f",pre);
return ;
}
【POJ】2420 A Star not a Tree?(模拟退火)的更多相关文章
- poj 2420 A Star not a Tree? —— 模拟退火
题目:http://poj.org/problem?id=2420 给出 n 个点的坐标,求费马点: 上模拟退火. 代码如下: #include<iostream> #include< ...
- poj 2420 A Star not a Tree?——模拟退火
题目:http://poj.org/problem?id=2420 精度设成1e-17,做三遍.ans设成double,最后再取整. #include<iostream> #include ...
- POJ 2420 A Star not a Tree?(模拟退火)
题目链接 居然1Y了,以前写的模拟退火很靠谱啊. #include <cstdio> #include <cstring> #include <string> #i ...
- 三分 POJ 2420 A Star not a Tree?
题目传送门 /* 题意:求费马点 三分:对x轴和y轴求极值,使到每个点的距离和最小 */ #include <cstdio> #include <algorithm> #inc ...
- [POJ 2420] A Star not a Tree?
A Star not a Tree? Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 4058 Accepted: 200 ...
- POJ 2420 A Star not a Tree? (计算几何-费马点)
A Star not a Tree? Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 3435 Accepted: 172 ...
- POJ 2420 A Star not a Tree? 爬山算法
B - A Star not a Tree? Time Limit: 20 Sec Memory Limit: 256 MB 题目连接 http://acm.hust.edu.cn/vjudge/co ...
- POJ 2420 A Star not a Tree?【爬山法】
题目大意:在二维平面上找出一个点,使它到所有给定点的距离和最小,距离定义为欧氏距离,求这个最小的距离和是多少(结果需要四舍五入)? 思路:如果不能加点,问所有点距离和的最小值那就是经典的MST,如果只 ...
- uva 10228 - Star not a Tree?(模拟退火)
题目链接:uva 10228 - Star not a Tree? 题目大意:给定若干个点,求费马点(距离全部点的距离和最小的点) 解题思路:模拟退火算法,每次向周围尝试性的移动步长,假设发现更长处, ...
随机推荐
- tomcat部署和启动
- Linux下Bind error: Address already in use处理
发生这种问题是由于端口被程序绑定而没有释放造成. 可以使用netstat -lp查询当前处于连接的程序以及对应的进程信息. 如果只想查看指定端口,可以输入netstat -lp | grep 9877 ...
- final版——爱阅APP功能说明书
爱阅APP功能说明书 一.引言 以下内容是final版的功能说明书. 新增功能: 1.WiFi传书 2.书友群跳转 3.网址内部打开 4.设置-->关于爱阅 5.设置-->TXT文本的翻页 ...
- stm32 DMA配置
DMA就是将一个地址空间复制到另外一个地址空间.DMA传输方式无需CPU直接控制传输,也没有中断处理方式那样保留现场和恢复现场的过程,通过硬件为RAM与I/O设备直接传送数据,使CPU的效率大大的提高 ...
- CodeForces - 325E:The Red Button (哈密尔顿 转 欧拉回路)
Piegirl found the red button. You have one last chance to change the inevitable end. The circuit und ...
- Cassandra 数据库, python cqlsh命令
★ cql操作数据库(cqlsh.bat: python cqlsh命令操作<优缺点:https://blog.csdn.net/vbirdbest/article/details/77662 ...
- google play apk 下载
https://apps.evozi.com/apk-downloader/?id=com.sgiggle.production
- dbt macro 说明
macro是SQL的片段,可以像模型中的函数一样调用.macro可以在模型之间重复使用SQL,以符合DRY(不要重复自己)的工程原理. 此外,共享包可以公开您可以在自己的dbt项目中使用的macro. ...
- vs2013下OpenGL环境的配置
1.下载glut库:https://files.cnblogs.com/files/laoxia/glutdlls37beta.zip 2.解压后,将glut.lib和glut32.lib两个文件拷贝 ...
- hadoop之 node manager起不来, 执行mapreduce 程序hang住
现象: node manager起不来, 执行mapreduce 程序hang住 namenode 进程状态查询[root@hadp-master sbin]# jps8608 ResourceMan ...