bzoj 3680 吊打xxx 模拟退火
第一道模拟退火
重心嘛,就是要找到一个点,使其到所有点距离*该点权值和最小
思路:初始化一个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 模拟退火的更多相关文章
- bzoj 2428: [HAOI2006]均分数据 && bzoj 3680 : 吊打XXX 模拟退火
每次把元素随便扔随机一个初始解,退火时每次随机拿一个元素扔到随机一个集合里,当温度高时因为状态不稳定扔到那个元素和最小的里边. 如果新解优,更新ans. 把原式拆一下,就可以用int存了. bzoj ...
- 洛谷 P1337 平衡点 & bzoj 3680 吊打 XXX —— 模拟退火
题目:https://www.luogu.org/problemnew/show/P1337 https://www.lydsy.com/JudgeOnline/problem.php?id=3680 ...
- BZOJ.3680.吊打XXX(模拟退火/爬山算法)
题目链接 一个比较好的解释? 模拟退火(Simulated Annealing,SA): (1)初始化一个温度(充分大).初始解状态S.每个T值的迭代次数. (2)对i=1,...,L,做(3)至(7 ...
- BZOJ 3680: 吊打XXX (模拟退火)
//yy:今天简单入门学了下ORZ 爬山算法:兔子朝着比现在高的地方跳去.它找到了不远处的最高山峰.但是这座山不一定是珠穆朗玛峰.这就是爬山算法,它不能保证局部最优值就是全局最优值. 模拟退火:兔子喝 ...
- BZOJ 3680: 吊打XXX【模拟退火算法裸题学习,爬山算法学习】
3680: 吊打XXX Time Limit: 10 Sec Memory Limit: 128 MBSec Special JudgeSubmit: 3192 Solved: 1198[Sub ...
- [BZOJ 3680] 吊打XXX 【模拟退火】
题目链接:BZOJ - 3680 题目分析 这道题是SLYZ的神犇把JSOI的平衡点那道题改了一下题面变成了吊打GTY神犇..Orz 第一次写模拟退火,只能照着别人的代码写,我看的是PoPoQQQ神犇 ...
- BZOJ 3680 吊打XXX
Description gty又虐了一场比赛,被虐的蒟蒻们决定吊打gty.gty见大势不好机智的分出了n个分身,但还是被人多势众的蒟蒻抓住了.蒟蒻们将n个gty吊在n根绳子上,每根绳子穿过天台的一个洞 ...
- 3680: 吊打XXX
3680: 吊打XXX 链接 思路: 模拟退火. 代码: 跑的特别慢... #include<cstdio> #include<algorithm> #include<c ...
- 【BZOJ3680】吊打xxx [模拟退火]
吊打XXX Time Limit: 10 Sec Memory Limit: 128 MB[Submit][Status][Discuss] Description gty又虐了一场比赛,被虐的蒟蒻 ...
随机推荐
- 别跟我谈EF抵抗并发,敢问你到底会不会用EntityFramework
前言 一直以来写的博文都是比较温婉型的博文,今天这篇博文算是一篇批判性博文,有问题欢迎探讨,如标题,你到底会不会用EntityFramework啊. 你到底会不会用EntityFramework啊 面 ...
- Collections模块下的Counter
class Counter(dict) 这个类是dict的子类,对哈希类型的项进行计数,元素被存储为字典的键,他们的计数将作为字典的键值. 主要介绍两个方法: 1.初始化方法:__init__(*ar ...
- Linux服务器安全审计工具与流程完全指南
http://Linux.chinaitlab.com/server/860516.html 当今许多linux服务器都不是刚刚部署完毕的新机器,有专业的Linux系统管理员进行定期维护,IT技术人员 ...
- Java并发-线程安全性
首先了解一下多线程的概念 多线程:两段或以上的代码同时进行,多个顺序执行流. 并发和并行的区别 并发:做一下这个做一下那个. 并行:同时进行. 线程和进程的区别 进程:资源分配的基本单位,运行中的程序 ...
- OCR智能识别身份信息
本人研究了两款OCR智能识别的API,下面做详解! 第一款是百度云的OCR识别,填写配置信息,每天有五百次免费的识别次数,适合中小型客户流量可以使用.API文档:http://ai.baidu.com ...
- js实现地图打印功能
注意:js对地图的打印功能在arcgis10.1中才有提供,所以如果要使用esri自带的地图打印功能,必须使用arcgis 10.1或更高版本的地图打印模板.(由于官网和arcgis desktop提 ...
- 44.1khz 16位比特双声道一分钟的音乐文件占多少硬盘空间?
2*2*44.1*1000*60=10584000字节=10M2个声道*(16比特/8比特)字节*采样率(每秒采样44.1*1000次)*一分钟有60秒16比特是精度,描述振幅的,16比特等于2个字节 ...
- python爬虫入门(七)Scrapy框架之Spider类
Spider类 Spider类定义了如何爬取某个(或某些)网站.包括了爬取的动作(例如:是否跟进链接)以及如何从网页的内容中提取结构化数据(爬取item). 换句话说,Spider就是您定义爬取的动作 ...
- 终于等到你: 图形化开源爬虫Hawk 3发布!
超级图形化爬虫Hawk已经发布两年半时间了,2015年升级到第二版,收到上千条用户反馈(tucao),100多个红包,总共666块五毛~一直想攒着这笔钱,去北境之王天通苑的龙德商场买最心爱的阿迪王! ...
- Python学习 Part4:模块
Python学习 Part4:模块 1. 模块是将定义保存在一个文件中的方法,然后在脚本中或解释器的交互实例中使用.模块中的定义可以被导入到其他模块或者main模块. 模块就是一个包含Python定义 ...