博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
POJ 2420解题报告
阅读量:4204 次
发布时间:2019-05-26

本文共 587 字,大约阅读时间需要 1 分钟。

好吧。这道题最大的收获是发现模拟退火算法好简单啊。还是很容易写出来的。这道题我看大牛们用的是牛顿近似解或者模拟退火算法。

可以移步这里:

提交到POJ后WA,于是自己的程序改得越来越像上面链接中的程序了。于是不贴代码了。收获是最终发现错误还是出在逻辑上面,自己有个变量没注意,导致虽然能过样例点,但是过不了测试点。所以下次在出现这种情况还是要检查程序,不要太关注那些很诡异的地方。比如输出时printf("%lf\n", f)中有没有l等。

这道题用一个candidates[Nr]的数组不断逼近最优解。

生成过程如下:

首先,求出所有的点的坐标的最大范围,记为T,在这个范围内生成Nr个随机点。我看到有直接用输入点作为起始点的,在这个测试数据下也可以通过。

然后,对这Nr个随机点,每次再随机产生Nr(或别的数目)个随机点,如果生成的随机点的更逼近最优点(即距离和最小),则用新的随机点代替之前的。每次生成随机点的范围为该点T*belta以内(belta在0~1之间)。也就是说范围T每次缩小为原来的0.8(或别的数值)。

循环结束的条件是T小于最小的粒度,比如0.1或是随机点有特别接近最优点的。

大致思路如此,写起来其实也很简单,不要有畏难情绪就好。wikipedia上有模拟退火算法的挺清楚的描述:

最后感慨一句。早这样写POJ程序估计我早成大牛或是资深码农了。唉。

转载地址:http://yxxli.baihongyu.com/

你可能感兴趣的文章
Spring集成mybatis后,打印SQL语句
查看>>
DRUID连接池的实用 配置详解
查看>>
设计模式Design Patterns (一)
查看>>
Linux安装apache源码包报错:Cannot use an external APR with the bundled APR-util
查看>>
Linux安装apache源码包报错:mod_deflate has been requested but can not be built due to prerequisite failures
查看>>
Linux 下 apache启动、停止、重启命令
查看>>
SpringBoot读取配置文件乱码
查看>>
Linux 学习总结 (一)
查看>>
Linux 学习总结 (二)
查看>>
Linux 学习总结 (三)
查看>>
Linux 学习总结 (四)
查看>>
Linux 学习总结 (五)
查看>>
Java 复习总结 (一)
查看>>
git 使用总结
查看>>
Linux安装apache源码包
查看>>
Android 处理ListView数据为空
查看>>
Android 获取assets的绝对路径
查看>>
Android 启动tomcat报错
查看>>
Android Studio导入项目太慢解决方法
查看>>
Android 之ButterKnife注解使用
查看>>