zoukankan      html  css  js  c++  java
  • BZOJ3680 吊打xxx

    爬山。

    爬山算法即是模拟爬山的过程,随机选择一个位置爬山,每次朝着更高
    的方向移动,直到到达山顶,即每次都在临近的空间中选择最优解作为
    当前解,直到局部最优解。这样算法会陷入局部最优解,能否得到全局
    最优解取决于初始点的位置。初始点若选择在全局最优解附近,则就可
    能得到全局最优解。

    http://www.matrix67.com/blog/archives/422

    By:大奕哥

     1 #include<bits/stdc++.h>
     2 using namespace std;
     3 int n;
     4 double ansx,ansy;
     5 struct node{
     6     double x,y;
     7     int w;
     8 }p[10005];
     9 double sqr(double x){return x*x;}
    10 double dis(double x,double y,node b){
    11     return sqrt(sqr(x-b.x)+sqr(y-b.y));
    12 }
    13 void hillclimb()
    14 {
    15     double t=1000,x,y;
    16     for(int i=1;i<=n;++i)
    17     ansx+=p[i].x*p[i].w,ansy+=p[i].y*p[i].w;
    18     ansx/=n;ansy/=n;
    19     while(t>1e-9)
    20     {
    21         x=y=0;
    22         for(int i=1;i<=n;++i)
    23         {
    24             x+=(p[i].x-ansx)*p[i].w/dis(ansx,ansy,p[i]);
    25             y+=(p[i].y-ansy)*p[i].w/dis(ansx,ansy,p[i]);
    26         }
    27         ansx+=x*t;ansy+=y*t;
    28         if(t>0.5)t*=0.5;
    29         else t*=0.97;
    30     }
    31     printf("%.3lf %.3lf",ansx,ansy);
    32 }
    33 int main()
    34 {
    35     scanf("%d",&n);
    36     for(int i=1;i<=n;++i)
    37         scanf("%lf%lf%d",&p[i].x,&p[i].y,&p[i].w);
    38     hillclimb();
    39     return 0;
    40 }
  • 相关阅读:
    第一部分 题目要求
    完全卸载oracle
    zabbix的面试题目总结
    性能优化之MySQL调优篇
    select与epoll、apache与nginx实现原理对比
    深度优化LNMP之PHP
    深度优化LNMP之Nginx (转)
    git常用命令
    ansible 安装与卸载软件
    java8两个List集合取交集、并集、差集、去重并集
  • 原文地址:https://www.cnblogs.com/nbwzyzngyl/p/8244865.html
Copyright © 2011-2022 走看看