poj 2420 A Star not a Tree?——模拟退火
题目:http://poj.org/problem?id=2420
精度设成1e-17,做三遍。ans设成double,最后再取整。
#include<iostream> #include<cstdio> #include<cstring> #include<algorithm> #include<cmath> #include<cstdlib> #include<ctime> #define db double using namespace std; const int N=105; const db dc=0.99,eps=1e-17; int n,nx[N],ny[N]; db px,py,ans; db dis(db x0,db y0,db x1,db y1) { return sqrt((x0-x1)*(x0-x1)+(y0-y1)*(y0-y1)); } db calc(db x,db y) { db ret=0; for(int i=1;i<=n;i++)ret+=dis(nx[i],ny[i],x,y); return ret; } db gtrd(db T){return (rand()*2-RAND_MAX)*T;} void SA(db T) { db x0=px,y0=py,pr=calc(x0,y0),x,y,cr; while(T>eps) { x=x0+gtrd(T); y=y0+gtrd(T); cr=calc(x,y); if(cr<pr||(exp((cr-pr)/T)*RAND_MAX<rand())) { ans=min(ans,cr); x0=x;y0=y;pr=cr; } T*=dc; } } int main() { srand(time(0)); scanf("%d",&n); for(int i=1;i<=n;i++)scanf("%d%d",&nx[i],&ny[i]),px+=nx[i],py+=ny[i]; px/=n; py/=n; ans=calc(px,py); SA(10000);SA(10000);SA(10000); printf("%.0lf\n",ans); return 0; }
分类:
算法--随机化
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 深入理解 Mybatis 分库分表执行原理
· 如何打造一个高并发系统?
· .NET Core GC压缩(compact_phase)底层原理浅谈
· 现代计算机视觉入门之:什么是图片特征编码
· .NET 9 new features-C#13新的锁类型和语义
· Spring AI + Ollama 实现 deepseek-r1 的API服务和调用
· 《HelloGitHub》第 106 期
· 数据库服务器 SQL Server 版本升级公告
· 深入理解Mybatis分库分表执行原理
· 使用 Dify + LLM 构建精确任务处理应用