A Star not a Tree?
Time Limit: 1000MS   Memory Limit: 65536K
Total Submissions: 5788   Accepted: 2730

Description

Luke wants to upgrade his home computer network from 10mbs to 100mbs. His existing network uses 10base2 (coaxial) cables that allow you to connect any number of computers together in a linear arrangement. Luke is particulary proud that he solved a nasty NP-complete
problem in order to minimize the total cable length. 

Unfortunately, Luke cannot use his existing cabling. The 100mbs system uses 100baseT (twisted pair) cables. Each 100baseT cable connects only two devices: either two network cards or a network card and a hub. (A hub is an electronic device that interconnects
several cables.) Luke has a choice: He can buy 2N-2 network cards and connect his N computers together by inserting one or more cards into each computer and connecting them all together. Or he can buy N network cards and a hub and connect each of his N computers
to the hub. The first approach would require that Luke configure his operating system to forward network traffic. However, with the installation of Winux 2007.2, Luke discovered that network forwarding no longer worked. He couldn't figure out how to re-enable
forwarding, and he had never heard of Prim or Kruskal, so he settled on the second approach: N network cards and a hub. 



Luke lives in a loft and so is prepared to run the cables and place the hub anywhere. But he won't move his computers. He wants to minimize the total length of cable he must buy.

Input

The first line of input contains a positive integer N <= 100, the number of computers. N lines follow; each gives the (x,y) coordinates (in mm.) of a computer within the room. All coordinates are integers between 0 and 10,000.

Output

Output consists of one number, the total length of the cable segments, rounded to the nearest mm.

Sample Input

4
0 0
0 10000
10000 10000
10000 0

Sample Output

28284

题意:

给出平面内一个点集,让你求平面内一点距离这些点距离和的最小值~

好像退货模拟问题哎~

可惜我不会

只能用爬山算法做了,爬山算法讲的是首先在平面内选一点,判断它临近的点所求得的距离和是否比它小,若小,更新点的坐标

就这样,不过它也存在很大的局限性,如在高峰处无法选择下一点应该去哪儿,只是局部最优而已。

我们可以选择自己控制循环次数,类似于随机数之类的,然后根据大数据的判断比较,然后得出最终答案

AC代码:

#include<stdio.h>
#include<math.h>
#include<algorithm>
#include<iostream>
#define eps 1e-6
using namespace std;
struct point
{
    double x;
    double y;
    void input()                //输入
    {
        cin>>x>>y;
    }
    double dis(point k)         //求两点之间距离
    {
        return sqrt((x-k.x)*(x-k.x)+(y-k.y)*(y-k.y));
    }
} a[105];
double getsum(point k,int n)    //求距离和
{
    double s=0;
    for(int i=0; i<n; i++)
        s+=k.dis(a[i]);
    return s;
}
int main()
{
    int n;
    while(cin>>n)
    {
        point one;
        one.x=one.y=0;
        for(int i=0; i<n; ++i)
        {
            a[i].input();
            one.x+=a[i].x;
            one.y+=a[i].y;
        }
        one.x/=n;
        one.y/=n;           //选择一个靠中的点
        double ans=getsum(one,n);
        double t=10000;
        while(t>eps)        //循环次数
        {
            double x=0,y=0;
            for(int i=0; i<n; ++i)  //选取临近点
            {
                x+=(a[i].x-one.x)/one.dis(a[i]);
                y+=(a[i].y-one.y)/one.dis(a[i]);
            }
            point ttm;
            ttm.x=one.x+x*t;
            ttm.y=one.y+y*t;
            double tmp=getsum(ttm,n);
            if(tmp<ans)         //判断大小
            {
                ans=tmp;
                one.x+=x*t;
                one.y+=y*t;
            }
            t*=0.99;
        }
        printf("%.0f\n",ans);
    }
    return 0;
}

POJ 2420:A Star not a Tree?的更多相关文章

  1. 【POJ】【2420】A Star not a Tree?

    模拟退火 Orz HZWER 这题的题意是在二维平面内找一点,使得这点到给定的n个点的距离和最小……0.0 模拟退火算法请戳这里 //POJ 2420 #include<ctime> #i ...

  2. POJ2420:A Star not A Tree?

    我对模拟退火的理解:https://www.cnblogs.com/AKMer/p/9580982.html 我对爬山的理解:https://www.cnblogs.com/AKMer/p/95552 ...

  3. poj-2420 A Star not a Tree?(模拟退火算法)

    题目链接: A Star not a Tree? Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 5219   Accepte ...

  4. 三分 POJ 2420 A Star not a Tree?

    题目传送门 /* 题意:求费马点 三分:对x轴和y轴求极值,使到每个点的距离和最小 */ #include <cstdio> #include <algorithm> #inc ...

  5. POJ 2420 A Star not a Tree? 爬山算法

    B - A Star not a Tree? Time Limit: 20 Sec Memory Limit: 256 MB 题目连接 http://acm.hust.edu.cn/vjudge/co ...

  6. [POJ 2420] A Star not a Tree?

    A Star not a Tree? Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 4058   Accepted: 200 ...

  7. POJ 2420 A Star not a Tree? (计算几何-费马点)

    A Star not a Tree? Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 3435   Accepted: 172 ...

  8. 【POJ】2420 A Star not a Tree?(模拟退火)

    题目 传送门:QWQ 分析 军训完状态不好QwQ,做不动难题,于是就学了下模拟退火. 之前一直以为是个非常nb的东西,主要原因可能是差不多省选前我试着学一下但是根本看不懂? 骗分利器,但据说由于调参困 ...

  9. POJ 3321:Apple Tree + HDU 3887:Counting Offspring(DFS序+树状数组)

    http://poj.org/problem?id=3321 http://acm.hdu.edu.cn/showproblem.php?pid=3887 POJ 3321: 题意:给出一棵根节点为1 ...

随机推荐

  1. hdu Farm Irrigation

    这题第一感觉是用搜索做,暴力就可以解决,这里将水管转换成一个个3*3的矩阵,然后搜素就可以了.写完之后确实一遍过掉了,31ms.附上代码: #include"iostream" # ...

  2. webapp 公共样式

    html{ font-size: 62.5%;}@media only screen and (min-width: 481px) { html { font-size:94%!important } ...

  3. Xstream(对象和xml转换)

    package com.vcredit.framework.utils; import java.io.Writer; import org.apache.commons.lang3.StringUt ...

  4. //sql过滤关键字

    //sql过滤关键字 public static bool CheckKeyWord(string sWord) { //过滤关键字 string StrKeyWord = @"select ...

  5. Android课程---单选框与复选框的实现

    <?xml version="1.0" encoding="utf-8"?> <manifest xmlns:android="ht ...

  6. Yii源码阅读笔记(二十六)

    Application 类中设置路径的方法和调用ServiceLocator(服务定位器)加载运行时的组件的方法注释: /** * Handles the specified request. * 处 ...

  7. 《UML大战需求分析》阅读笔记02

    软件应能真正的对客户的工作提供帮助,只有客户使用并真正对其有用才能说我们做的软件成功了.客户从开始提出需求时到后期的工作过程中,需求总是不停变化的,所以这就需要需求人员对需求领先于客户.所以活用UML ...

  8. 解决pip国外安装源慢的问题

    用默认的pip安装源pypi.python.org由于在国外经常会出现超时的问题,而且安装速度极其的慢,如下图中的超时问题=>

  9. 移除\禁用 jquery mobile 元素样式渲染

    在元素上加属性. data-role="none"

  10. mvc 数据验证金钱格式decimal格式验证

    mvc 数据验证金钱格式decimal格式验证 首先看下代码 /// <summary> /// 产品单价 /// </summary> [Display(Name = &qu ...