题目链接:http://poj.org/problem?id=2420

求费马点,即到所有其他点总和距离最小的点。

一开始想枚举一个坐标,另一个坐标二分的,但是check的时候还是O(n)的,复杂度相当于O(n^2lgn),没意义。

学习一种神贪心,模拟退火。感觉和启发式搜索有点像啊,又有点像牛顿迭代。

  思路就是,固定一个点和一个步长,从这个点开始向四个方向扩展,扩展的步长就是当前步长。如果扩展到的点可以更新答案,那么记住这个点,也就是说这个贪心方向(梯度?)是正确的。就可以拿着这个点继续沿着这个方向走了(剩余的方向可以不考虑了)。

  如果四个方向都不能走,说明步长过长,这个时候模拟退火,将步长按比率缩小。

 #include <algorithm>
#include <iostream>
#include <iomanip>
#include <cstring>
#include <climits>
#include <complex>
#include <cassert>
#include <cstdio>
#include <bitset>
#include <vector>
#include <deque>
#include <queue>
#include <stack>
#include <ctime>
#include <set>
#include <map>
#include <cmath>
using namespace std; typedef pair<double, double> pdd;
#define x first
#define y second
const double eps = 1e-;
const double delta = 0.98;
const int maxn = ;
const int dx[] = {, -, , };
const int dy[] = {, , , -};
int n;
double ret;
pdd cur;
pdd p[maxn]; double dist(pdd a, pdd b) {
double p = a.x - b.x;
double q = a.y - b.y;
return sqrt(p * p + q * q);
} int main() {
// freopen("in", "r", stdin);
while(~scanf("%d", &n)) {
for(int i = ; i < n; i++) {
scanf("%lf %lf", &p[i].x, &p[i].y);
}
int t = ;
ret = 1e100;
cur = pdd(., .);
while(t > eps) {
bool flag = ;
while(flag) {
flag = ;
for(int i = ; i < ; i++) {
pdd pos = pdd(cur.x+dx[i]*t, cur.y+dy[i]*t);
double tmp = .;
for(int j = ; j < n; j++) {
tmp += dist(pos, p[j]);
}
if(ret - tmp > eps) {
ret = tmp;
cur = pos;
flag = ;
break;
}
}
}
t *= delta;
}
printf("%.0f\n", ret);
}
return ;
}

[POJ2420]A Star not a Tree?(模拟退火)的更多相关文章

  1. poj-2420 A Star not a Tree?(模拟退火算法)

    题目链接: A Star not a Tree? Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 5219   Accepte ...

  2. Poj2420 A Star not a Tree? 模拟退火算法

    题目链接:http://poj.org/problem?id=2420 题目大意:每组数据中给n个点(n<=100),求平面中一个点使得这个点到n个点的距离之和最小. 分析:一开始看到这个题想必 ...

  3. poj2420 A Star not a Tree? 模拟退火

    题目大意: 给定n个点,求一个点,使其到这n个点的距离最小.(\(n \leq 100\)) 题解 模拟退火上 #include <cmath> #include <cstdio&g ...

  4. poj2420 A Star not a Tree? 找费马点 模拟退火

    题目传送门 题目大意: 给出100个二维平面上的点,让你找到一个新的点,使这个点到其他所有点的距离总和最小. 思路: 模拟退火模板题,我也不懂为什么,而且一个很有意思的点,就是初始点如果是按照我的代码 ...

  5. uva 10228 - Star not a Tree?(模拟退火)

    题目链接:uva 10228 - Star not a Tree? 题目大意:给定若干个点,求费马点(距离全部点的距离和最小的点) 解题思路:模拟退火算法,每次向周围尝试性的移动步长,假设发现更长处, ...

  6. 【模拟退火】poj2420 A Star not a Tree?

    题意:求平面上一个点,使其到给定的n个点的距离和最小,即费马点. 模拟退火的思想是随机移动,然后100%接受更优解,以一定概率接受更劣解.移动的过程中温度缓慢降低,接受更劣解的概率降低. 在网上看到的 ...

  7. POJ-2420 A Star not a Tree? 梯度下降 | 模拟退火

    题目链接:https://cn.vjudge.net/problem/POJ-2420 题意 给出n个点,找一个点,使得这个点到其余所有点距离之和最小. 思路 一开始就在抖机灵考虑梯度下降,猜测是个凸 ...

  8. POJ 2420 A Star not a Tree?(模拟退火)

    题目链接 居然1Y了,以前写的模拟退火很靠谱啊. #include <cstdio> #include <cstring> #include <string> #i ...

  9. poj2420A Star not a Tree?(模拟退火)

    链接 求某一点到其它点距离和最小,求这个和,这个点 为费马点. 做法:模拟退火 #include <iostream> #include<cstdio> #include< ...

随机推荐

  1. DOS命令追加符的使用

    @echo off start \\192.168.10.120\常用软件\系统工具\远程客户端\winvnc.exe #打开共享的远程客户端程序 ipconfig /all > d:\disp ...

  2. docker 组件(c/s)

    Docker 组件 1. docker client : docker的客户端 2. docker server : docker daemon的主要组成部分,接受用户通过docker client发 ...

  3. TCP/IP、Http、Socket的区别

    1.标准网络层次 网络由下往上分为:物理层.数据链路层.网络层.传输层.会话层.表示层和应用层. 下面的图表试图显示不同的TCP/IP和其他的协议在最初OSI模型中的位置: 7 应用层 例如HTTP. ...

  4. MVC中权限管理

    权限管理,一般指根据系统设置的安全规则或者安全策略,用户可以访问而且只能访问自己被授权的资源,不多不少.权限管理几乎出现在任何系统里面,只要有用户和密码的系统.权限管理还是比较复杂的,有的固定到某个模 ...

  5. Mysql如何向存在外键的数据表中插入数据

    1.创建表 CREATE TABLE `trn_comment_msg` ( `comMsgId` ) NOT NULL AUTO_INCREMENT COMMENT '评论消息主键', `msgId ...

  6. BZOJ1095 [ZJOI2007]Hide 捉迷藏

    动态树分治,用三个set分别维护每个重心到每一个子树的距离种类.每个重心所有子树的最大值和次大值.全局答案的最大值.复杂度O(nlogn^2) 代码 #include<cstdio> #i ...

  7. Something about Linux

    Linux-一切皆文件 VMnet1   Host-Only网络下的虚拟交换机      VMnet8  虚拟NAT网络下的虚拟交换机 桥接模式 虚拟出同一网段下都能访问的服务器 ---------- ...

  8. 时间轴感----Allen Pike

    动画要跑在60fps下.这意味着每一帧需要花费16ms来跑完(1000ms/60=16).这是要达到原生应用般平滑体验的最基本要求.60 fps是所有的iOS的内置动画运行的速度;这就是为什么滚动在i ...

  9. ubuntu安装cpu版caffe

    最近在笔记本上配置了ubuntu14.04,并配置了caffe,整个过程大概花了2个小时. 希望在安装时能给大家一个启发,这里配置的是无gpu版的,因为我的笔记本时核心显卡,配置gpu版的要编译cud ...

  10. Linux-4.4-x86_64 内核配置选项简介【转】

    转自:http://fx114.net/qa-188-150553.aspx 本篇文章主要介绍了"Linux-4.4-x86_64 内核配置选项简介",主要涉及到Linux-4.4 ...