HDU 3932 模拟退火
HDU3932
题目大意:给定一堆点,找到一个点的位置使这个点到所有点中的最大距离最小
简单的模拟退火即可
1 #include <iostream> 2 #include <cstdio> 3 #include <cstring> 4 #include <cstdlib> 5 #include <cmath> 6 #include <ctime> 7 #include <algorithm> 8 9 using namespace std; 10 11 #define N 1005 12 #define PI acos(-1.0) 13 #define random(x) (rand()%x+1) 14 const int P = 20; 15 const int L = 25; 16 double X,Y; 17 int n; 18 double mindis[N]; 19 20 struct Point{ 21 double x , y; 22 Point(double x=0 , double y=0):x(x),y(y){} 23 void input(){ 24 scanf("%lf%lf" , &x , &y); 25 } 26 }p[N] , tmp[N]; 27 28 double dis(Point a , Point b) 29 { 30 double x = a.x-b.x , y=a.y-b.y; 31 return sqrt(x*x+y*y); 32 } 33 34 double cal(Point a) 35 { 36 double maxn = 0; 37 for(int i=0 ; i<n ; i++) maxn = max(maxn , dis(a , p[i])); 38 return maxn; 39 } 40 41 int main() 42 { 43 #ifndef ONLINE_JUDGE 44 freopen("a.in" , "r" , stdin); 45 #endif // ONLINE_JUDGE 46 while(~scanf("%lf%lf%d" , &X , &Y , &n)) 47 { 48 for(int i=0 ; i<n ; i++) p[i].input(); 49 for(int i=0 ; i<P ; i++){ 50 tmp[i].x = random(1000)/1000.0*X; 51 tmp[i].y = random(1000)/1000.0*Y; 52 mindis[i] = cal(tmp[i]); 53 } 54 double step = sqrt(X*X+Y*Y)/2; 55 while(step>1e-3){ 56 for(int i=0 ; i<P ; i++){ 57 for(int j=0 ; j<L ; j++){ 58 Point cur; 59 double ang = random(1000)/1000.0*2*PI; 60 cur.x = tmp[i].x+cos(ang)*step; 61 cur.y = tmp[i].y+sin(ang)*step; 62 if(cur.x<0 || cur.x>X || cur.y<0 || cur.y>Y) continue; 63 double val = cal(cur); 64 if(val<mindis[i]){ 65 mindis[i] = val; 66 tmp[i] = cur; 67 } 68 } 69 } 70 step *= 0.85; 71 } 72 double ret = 1e20; 73 Point u; 74 for(int i=0 ; i<P ; i++){ 75 if(mindis[i]<ret){ 76 u = tmp[i]; 77 ret = mindis[i]; 78 } 79 } 80 printf("(%.1f,%.1f).\n%.1f\n" , u.x,u.y,ret); 81 } 82 return 0; 83 }
转载于:https://www.cnblogs.com/CSU3901130321/p/4530595.html
HDU 3932 模拟退火相关推荐
- 平面点集的最小包围圆 hdu 3932
最小覆盖圆算法地址:http://soft.cs.tsinghua.edu.cn/blog/?q=node/1066 平面点集的最小包围圆 1. 问题背景 考察固定在工作平台上 ...
- 模拟退火算法从原理到实战【基础篇】
模拟退火算法来源于固体退火原理,将固体加温至充分高,再让其徐徐冷却,加温时,固体内部粒子随温升变为无序状,内能增大,而徐徐冷却时粒子渐趋有序,在每个温度都达到平衡态,最后在常温时达到基态,内能减为最小 ...
- 模拟退火的一些个人见解
首先通过下面这个链接大概了解了一下什么是模拟退火,我觉得这篇博客还是不错的,但是最开始看完还是感觉很迷茫,不知道模拟退火改如何去应用并解决问题. 点击打开链接 为什么叫模拟退火呢? 想象一个高温物体的 ...
- java模拟退火算法求函数_模拟退火算法从原理到实战【基础篇】
模拟退火算法来源于固体退火原理,将固体加温至充分高,再让其徐徐冷却,加温时,固体内部粒子随温升变为无序状,内能增大,而徐徐冷却时粒子渐趋有序,在每个温度都达到平衡态,最后在常温时达到基态,内能减为最小 ...
- 夜深人静写算法(十二)- 模拟退火
一.引例 1.函数最值 函数最值分为函数最大值和函数最小值,最小值即定义域内函数的最小值, 最大值即定义域内函数的最大值.函数最大(小)值的几何意义为函数图像的最高(低) ...
- 模拟退火 HDU - 2899 Strange Function
Strange Function [ HDU - 2899 ] 题目大意: 函数 F(x) = 6x7 + 8x6 + 7x3 + 5x2 - yx, 其中x的范围是0 ≤ x ≤ 100. 输入y值 ...
- HDU - 5017 Ellipsoid(三分套三分/模拟退火)
题目链接:点击查看 题目大意:给出一个椭球面的方程,求椭球面上的点与原点距离的最小值 题目分析:因为涉及到了求最小值,我们可以考虑三分,又因为每一个点都是三维的(x,y,z),不过z可以通过x和y的计 ...
- Ellipsoid HDU - 5017(模拟退火)
Given a 3-dimension ellipsoid(椭球面) your task is to find the minimal distance between the original po ...
- 【HDU - 5017】Ellipsoid(爬山算法,模拟退火,三分)
题干: Given a 3-dimension ellipsoid(椭球面) your task is to find the minimal distance between the origina ...
最新文章
- 免费下载!200+讲者核心观点公布!2021最强AI学术会议视频全部回放
- Java程序设计第二次作业
- AppWidgetServiceImpl: Widget Error: widget.host.callbacks is null
- c语言中如何将select出来的字段值赋给一个变量,sql server 重命名列(字段)
- JAVA.IO字节流
- 微软桌面虚拟化vdi 安装测试体验
- OpenCV-获取图像中直线上的数据
- NS各种常用资料(转)
- mysql_连接故障 Too many open files in system
- 5G商用牌照发放 三家运营商发表获牌规划
- C++名称查找与ADL
- 瞳孔中的视觉刺激提取大脑中ERD/ERS
- 数据结构与算法_01_复杂度分析
- 【财务】FMS财务管理系统---应收管理
- mysql 触发器 sql server_喜忧参半的SQL Server触发器
- 主流的第三方直播SDK对比(腾讯云、即构、阿里云、声网、网易云信、网宿)
- java x_java - “x = x ++”后的x是什么?
- useradd -g -G
- WordPress网站加装SSL证书后无法正常加载图片问题
- sftp命令复制文件
热门文章
- 汇编-debug结果正确与执行结果错误
- Linux内核源码分析方法
- 电脑上同时安装了tensorflow和tensorflow-gpu,如何默认使用tensorflow-gpu
- 关于mysql触发器的问题:执行事件插入的字段是否一定要满足字段的所有约束条件?
- buffer和cache怎么让你们解释的那么难理解?
- ibatis spring框架升级到5.x_Java SSM框架常见面试题,良心整理,
- aspectj annotation- used in spring
- java操作LINUX上文件,设置权限问题
- assets与static的区别
- mvcpager之学习