洛谷P1337 [JSOI2004]平衡点 / 吊打XXX

  • 基本上是照着别人的代码写的,模拟退火为什么一定能找到答案呢。。。迷惑,,有时间搜一搜证明啥的
  • sa步骤:这个是要确定一个(xi,yi)使得函数()值最小,所以先选一个开始的点(这里选的是所有桌子上的点的均值),然后(rand()*2-RAND_MAX)*T就是deltax,deltay,然后再算出移动了这个delta后的函数值,该函数值如果是一个更小的值,则接受,否则如果( exp(-delta/T)*RAND_MAX>rand() )才接受,注意这里的delta是函数值的差值,这个exp(-delta/T)是一个在0,1之间的数。
  • 产生移动距离:(rand()*2-RAND_MAX)*T  (这样正负都有)
  • 以一定的概率接受移动:exp(-delta/T)*RAND_MAX>rand()
  • 步骤:找到需要最优化的函数,找到移动方案,徐徐降温直到温度达到exp=1e-15退出,输出答案
  • 代码:
     #include <bits/stdc++.h>
    #define nmax 1010 using namespace std;
    int n;
    double x[nmax],y[nmax],w[nmax];
    double ansx,ansy;
    const double eps=1e-; int cnt=; double f(double nx,double ny){
    double tot=,tmp;
    for (int i=; i<n; i++) {
    tmp=sqrt( (nx-x[i])*(nx-x[i])+(ny-y[i])*(ny-y[i]) );
    tot+=tmp*w[i];
    }
    return tot;
    } void sa(){
    double t=200.0;
    while(t>eps){
    double nowx=ansx+(rand()*-RAND_MAX)*t,nowy=ansy+(rand()*-RAND_MAX)*t;
    double delta=f(nowx,nowy)-f(ansx,ansy);
    if( delta< || ( exp(-delta/t)*RAND_MAX>rand() ) ) { ansx=nowx; ansy=nowy; }
    t*=0.998;
    }
    } int main(){
    srand((int)time(NULL));
    cin>>n;
    for (int i=; i<n; i++) {
    scanf("%lf%lf%lf",&x[i],&y[i],&w[i]);
    ansx+=x[i];
    ansy+=y[i];
    }
    ansx/=(double)n;
    ansy/=(double)n;
    sa();
    printf("%.3lf %.3lf\n",ansx,ansy);
    return ;
    }

    模拟退火SA刷题记录的更多相关文章

    1. PE刷题记录

      PE刷题记录 PE60 / 20%dif 这道题比较坑爹. 所有可以相连的素数可以构成一张图,建出这张图,在其中找它的大小为5的团.注意上界的估算,大概在1W以内.1W内有1229个素数,处理出这些素 ...

    2. leetcode刷题记录--js

      leetcode刷题记录 两数之和 给定一个整数数组 nums 和一个目标值 target,请你在该数组中找出和为目标值的那 两个 整数,并返回他们的数组下标. 你可以假设每种输入只会对应一个答案.但 ...

    3. Leetcode刷题记录(python3)

      Leetcode刷题记录(python3) 顺序刷题 1~5 ---1.两数之和 ---2.两数相加 ---3. 无重复字符的最长子串 ---4.寻找两个有序数组的中位数 ---5.最长回文子串 6- ...

    4. 刷题记录:[HarekazeCTF2019]encode_and_encode

      目录 刷题记录:[HarekazeCTF2019]encode_and_encode 一.知识点 JSON转义字符绕过 php伪协议 刷题记录:[HarekazeCTF2019]encode_and_ ...

    5. 刷题记录:[De1CTF 2019]Giftbox && Comment

      目录 刷题记录:[De1CTF 2019]Giftbox && Comment 一.知识点 1.sql注入 && totp 2.RCE 3.源码泄露 4.敏感文件读取 ...

    6. 刷题记录:[强网杯 2019]Upload

      目录 刷题记录:[强网杯 2019]Upload 一.知识点 1.源码泄露 2.php反序列化 刷题记录:[强网杯 2019]Upload 题目复现链接:https://buuoj.cn/challe ...

    7. 刷题记录:[XNUCA2019Qualifier]EasyPHP

      目录 刷题记录:[XNUCA2019Qualifier]EasyPHP 解法一 1.error_log结合log_errors自定义错误日志 2.include_path设置包含路径 3.php_va ...

    8. 刷题记录:[DDCTF 2019]homebrew event loop

      目录 刷题记录:[DDCTF 2019]homebrew event loop 知识点 1.逻辑漏洞 2.flask session解密 总结 刷题记录:[DDCTF 2019]homebrew ev ...

    9. 刷题记录:[CISCN2019 东北赛区 Day2 Web3]Point System

      目录 刷题记录:[CISCN2019 东北赛区 Day2 Web3]Point System 知识点 1.padding-oracle attack 2.cbc字节翻转攻击 3.FFMpeg文件读取漏 ...

    随机推荐

    1. JavaScript——基础知识,开始我们的js编程之旅吧!

      JavaScript基础第01天 1. 编程语言 编程语言: 可以通过类似于人类语言的"语言"来控制计算机,让计算机为我们做事情,这样的语言就叫做编程语言(Programming ...

    2. windows的启动、引导配置

      Win+S -> msconfig

    3. echarts配置环形饼图的参数,以及牵引线显示百分比,中间数据

      最近项目有多处是用echarts的,有环形图,折线图,饼图,总结了一下. 本次主要讲环形图,折线图在下期. 这个是最终的效果图.下面附上代码 //三种占比 var myChartType = echa ...

    4. 在pycharm中如何设置代码对齐竖线

      方法:启动pycharm软件,打开一个文件,点 file 菜单,选择 settings,在弹出的setting菜单中依次选择editor-->general-->appearance,然后 ...

    5. JavaScript九九乘法表

      JavaScript九九乘法表 <script> for (var i = 1; i < 10; i++) { for (var j = 1; j <= i; j++) { d ...

    6. .NetCore学习笔记:四、AutoMapper对象映射

      什么是AutoMapper?AutoMapper是一个简单的小型库,用于解决一个看似复杂的问题 - 摆脱将一个对象映射到另一个对象的代码.这种类型的代码是相当沉闷和无聊的写,所以为什么不发明一个工具来 ...

    7. C#画图之饼图

      public JsonResult DrawPie() { // 预置颜色 List<Color> colors = new List<Color>() { Color.Fro ...

    8. SP1805 HISTOGRA - Largest Rectangle in a Histogram

      --------------------------------------------------- 我就是想学个单调栈然后全网都是个蓝题 ----------------------------- ...

    9. .net 父类值赋给子类

      1.最简单的方式,反射+泛型 优点:字段修改时,无需更改代码,只需要更新实体即可 缺点:因为用到反射,可能效率会稍微弱那么一点点,没有实际用太多字段测试 public static cClass Pa ...

    10. css过渡——实现元素的飞入飞出

      <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...