题目链接:http://poj.org/problem?id=2420
求费马点,即到所有其他点总和距离最小的点。
一开始想枚举一个坐标,另一个坐标二分的,但是check的时候还是O(n)的,复杂度相当于O(n^2lgn),没意义。
学习一种神贪心,模拟退火。感觉和启发式搜索有点像啊,又有点像牛顿迭代。
思路就是,固定一个点和一个步长,从这个点开始向四个方向扩展,扩展的步长就是当前步长。如果扩展到的点可以更新答案,那么记住这个点,也就是说这个贪心方向(梯度?)是正确的。就可以拿着这个点继续沿着这个方向走了(剩余的方向可以不考虑了)。
如果四个方向都不能走,说明步长过长,这个时候模拟退火,将步长按比率缩小。
1 #include
2 #include
3 #include
4 #include
5 #include
6 #include
7 #include
8 #include
9 #include
10 #include
11 #include
12 #include
13 #include
14 #include
15 #include <set>
16 #include
转载于:https://www.cnblogs.com/kirai/p/6229822.html
本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!