第一道模拟退火

重心嘛,就是要找到一个点,使其到所有点距离*该点权值和最小

思路:初始化一个T,mint,当T大于mint时,每次随机一个解,如果解比当前解优,直接转移,否则,以某概率(与T正相关)转移,并不断降温,最后向四周爬山

感觉思路比较清晰,但好多细节不太明白,比如初始化的T,mint,以及退火的速度,前后改了几十遍吧。还是要多做题,找感觉......

#include<cstdio>
#include<cstring>
#include<iostream>
#include<algorithm>
#include<cmath>
#define N 10050
using namespace std;
int n;
double minn=0x3f3f3f3f3f3f3f3fll;
struct point{
double x,y,g;
}p[N],ans;
double sqr(double x){return x*x;}
double dis(point a,point b){return sqrt(sqr(a.x-b.x)+sqr(a.y-b.y));}
double Rand(){return (rand()%1000)/1000.0;}
double judge(point pp){
double ret=0;
for(int i=1;i<=n;i++)
ret+=p[i].g*dis(p[i],pp);
if(ret<minn){minn=ret;ans=pp;}
return ret;
}
void work(){
double T=1000000;
point now=ans;
while(T>0.001){
point nxt;
nxt.x=now.x+T*(Rand()*2-1);
nxt.y=now.y+T*(Rand()*2-1);
double dE= judge(now)-judge(nxt);
if((dE>0)||(exp(dE/T)>Rand())) now=nxt;
T*=0.97;
}
double nouse;
for(int i=1;i<=1000;i++){
point nxt;
nxt.x=ans.x+T*(Rand()*2-1);
nxt.y=ans.y+T*(Rand()*2-1);
nouse=judge(nxt);
}
}
int main(){
srand(20001101);
scanf("%d",&n);
for(int i=1;i<=n;i++){
scanf("%lf%lf%lf",&p[i].x,&p[i].y,&p[i].g);
ans.x+=p[i].x; ans.y+=p[i].y;
}
ans.x/=n; ans.y/=n;
work();
printf("%0.3lf %0.3lf\n",ans.x,ans.y);
return 0;
}

bzoj 3680 吊打xxx 模拟退火的更多相关文章

  1. bzoj 2428: [HAOI2006]均分数据 && bzoj 3680 : 吊打XXX 模拟退火

    每次把元素随便扔随机一个初始解,退火时每次随机拿一个元素扔到随机一个集合里,当温度高时因为状态不稳定扔到那个元素和最小的里边. 如果新解优,更新ans. 把原式拆一下,就可以用int存了. bzoj ...

  2. 洛谷 P1337 平衡点 & bzoj 3680 吊打 XXX —— 模拟退火

    题目:https://www.luogu.org/problemnew/show/P1337 https://www.lydsy.com/JudgeOnline/problem.php?id=3680 ...

  3. BZOJ.3680.吊打XXX(模拟退火/爬山算法)

    题目链接 一个比较好的解释? 模拟退火(Simulated Annealing,SA): (1)初始化一个温度(充分大).初始解状态S.每个T值的迭代次数. (2)对i=1,...,L,做(3)至(7 ...

  4. BZOJ 3680: 吊打XXX (模拟退火)

    //yy:今天简单入门学了下ORZ 爬山算法:兔子朝着比现在高的地方跳去.它找到了不远处的最高山峰.但是这座山不一定是珠穆朗玛峰.这就是爬山算法,它不能保证局部最优值就是全局最优值. 模拟退火:兔子喝 ...

  5. BZOJ 3680: 吊打XXX【模拟退火算法裸题学习,爬山算法学习】

    3680: 吊打XXX Time Limit: 10 Sec  Memory Limit: 128 MBSec  Special JudgeSubmit: 3192  Solved: 1198[Sub ...

  6. [BZOJ 3680] 吊打XXX 【模拟退火】

    题目链接:BZOJ - 3680 题目分析 这道题是SLYZ的神犇把JSOI的平衡点那道题改了一下题面变成了吊打GTY神犇..Orz 第一次写模拟退火,只能照着别人的代码写,我看的是PoPoQQQ神犇 ...

  7. BZOJ 3680 吊打XXX

    Description gty又虐了一场比赛,被虐的蒟蒻们决定吊打gty.gty见大势不好机智的分出了n个分身,但还是被人多势众的蒟蒻抓住了.蒟蒻们将n个gty吊在n根绳子上,每根绳子穿过天台的一个洞 ...

  8. 3680: 吊打XXX

    3680: 吊打XXX 链接 思路: 模拟退火. 代码: 跑的特别慢... #include<cstdio> #include<algorithm> #include<c ...

  9. 【BZOJ3680】吊打xxx [模拟退火]

    吊打XXX Time Limit: 10 Sec  Memory Limit: 128 MB[Submit][Status][Discuss] Description gty又虐了一场比赛,被虐的蒟蒻 ...

随机推荐

  1. Python可视化TVTK库初使用

    本周学习了初步的TVTK库的安装及使用方法,第一次通过tvtk.CubeSource方法建立了一个长方体对象.对TVTK的接触有了新的体会. 首先,在网上下载了以下五个库并按顺序通过pip指令在cmd ...

  2. Tihinkphp3.2整合最新版阿里大鱼进行短信验证码发送

    阿里大鱼最新下载地址:阿里大鱼SDK下载 或者从官网进行下载:阿里大鱼SDK官网下载 下载完成后,将压缩包内的api_sdk文件夹放到ThinkPHP\Library\Vendor目录下,修改文件名为 ...

  3. 关于前端本地压缩图片,兼容IOS/Android/PC且自动按需加载文件之lrz.bundle.js

    一.介绍说明主要特点: ①在前端压缩好要上传的图片可以更快的发送给后端,因此也特别适合在移动设备上使用. ②兼容IOS/Android,修复了IOS/Android某些版本已知的BUG. ③按需加载文 ...

  4. java之Spring(IOC)注解装配Bean详解

    在这里我们要详细说明一下利用Annotation-注解来装配Bean. 因为如果你学会了注解,你就再也不愿意去手动配置xml文件了,下面就看看Annotation的魅力所在吧. 先来看看之前的bean ...

  5. mysql 存储引擎简介

    几个常用存储引擎的特点 下面我们重点介绍几种常用的存储引擎并对比各个存储引擎之间的区别和推荐使用方式. 特点 Myisam BDB Memory InnoDB Archive 存储限制 没有 没有 有 ...

  6. spark SQL随笔

    sparkSQL 1.主要的数据结构 DataFreames 2.开始使用:SQLContext 创建步骤: Val  sc:sparkContext Val  sqlContext=new org. ...

  7. THINKPHP 调试------输出sql语句

    echo $model->getLastSql();//$model为实例化的模板类

  8. day07

    放完了愚人节的假期后就忘记更新了,这样不好,学习的态度也有点懒散了,需要调整过来,这几天在做一个退款流程,想好了建表.逻辑设计和需求分析,然后就是写具体的代码了,有些东西还是要多学习,不然书到用时方恨 ...

  9. 通过数据流处理-微信小程序生成临时二维码

    1.小程序代码 onLoad: function (options) { var that = this api.Login(function (login) { var codeModel = ne ...

  10. 原生aspx页面如何引用公共js和css

    项目过程中遇到一个问题,每个页面需要引用很多的js和css文件,其中很多都是控件,而且大部分都是一样的,造成很多重复引用. 针对这种情况,参考了mvc的BundleConfig,思路是建立一个公用的用 ...