POJA Star not a Tree?(模拟退火)
2018-09-18 06:25:15来源:博客园 阅读 ()
题意
题目链接
给出$n$个点,求出一个点使得到各个点的距离之和最小,距离为欧几里得距离
Sol
模拟退火真是玄学,我退了一上午,最后把exp函数去了就A了。
后来改了改,发现是大小符号的问题。。
但是
这样是对的。
然后把RAND_MAX除过去就错了。。
需要改大小号才行。真是玄学。。。
/* */ #include<iostream> #include<cstdio> #include<cmath> #include<cstdlib> #include<ctime> using namespace std; const int MAXN = 1e5 + 10; const double eps = 1e-10, Dlt = 0.97; int N; double xx[MAXN], yy[MAXN]; double Ans; double rand(double T, int opt) { return opt * T ; } double sqr(double x) { return x * x; } double calc(double x, double y) { double ans = 0; for(int i = 1;i <= N; i++) ans += sqrt(sqr(x - xx[i]) + sqr(y - yy[i])); return ans; } void solve(double x, double y) { double now = calc(x, y); Ans = min(Ans, now); for(double T = 10000; T > eps; T *= Dlt) { for(int i = -1; i <= 1; i++) { for(int j = -1; j <= 1; j++) { double wx = x + rand(T, i), wy = y + rand(T, j); // if(wx < 0 || wy < 0 || wx > 10000 || wy > 10000) continue; double wv = calc(wx, wy); // printf("%lf %lf %lf\n", wx, wy, calc(wx, wy)); if(wv < Ans) x = wx, y = wy, Ans= wv; if(wv < now || ( exp((now - wv) / T) < (rand() / RAND_MAX) )) x = wx, y = wy, now = wv; // if(wv < now) x = wx, y = wy, now = wv; } } } } int main() { srand(19260817); // freopen("a.in", "r", stdin); Ans = 1e20; scanf("%d", &N); for(int i = 1; i <= N; i++) scanf("%lf %lf", &xx[i], &yy[i]); //printf("%lf", calc(5000, 5000)); //for(int i = 1; i <= N; i++) { // double x = rand() % 10000, y = rand() % 10000; solve(xx[2], yy[2]); //} printf("%d", (int)(Ans + 0.5)); return 0; } /* 4 0 0 0 5000 2354 10000 8787 0 */
标签:
版权申明:本站文章部分自网络,如有侵权,请联系:west999com@outlook.com
特别注意:本站所有转载文章言论不代表本站观点,本站所提供的摄影照片,插画,设计作品,如需使用,请与原作者联系,版权归原作者所有
下一篇:引用
- C++ non-const lvalue reference cannot bind to a temporar 2020-03-09
- SGU 132 Another Chocolate Maniac 2020-03-06
- qt连接mysql报错:QSqlDatabase: QMYSQL driver not loaded 2020-02-29
- Run-Time Check Failure #0 - The value of ESP was not pro 2019-11-11
- Data-Structure-Notes 2019-08-16
IDC资讯: 主机资讯 注册资讯 托管资讯 vps资讯 网站建设
网站运营: 建站经验 策划盈利 搜索优化 网站推广 免费资源
网络编程: Asp.Net编程 Asp编程 Php编程 Xml编程 Access Mssql Mysql 其它
服务器技术: Web服务器 Ftp服务器 Mail服务器 Dns服务器 安全防护
软件技巧: 其它软件 Word Excel Powerpoint Ghost Vista QQ空间 QQ FlashGet 迅雷
网页制作: FrontPages Dreamweaver Javascript css photoshop fireworks Flash