zoukankan      html  css  js  c++  java
  • 洛谷 P1433 吃奶酪

    题目描述

    房间里放着n块奶酪。一只小老鼠要把它们都吃掉,问至少要跑多少距离?老鼠一开始在(0,0)点处。

    输入输出格式

    输入格式:

     

    第一行一个数n (n<=15)

    接下来每行2个实数,表示第i块奶酪的坐标。

    两点之间的距离公式=sqrt((x1-x2)*(x1-x2)+(y1-y2)*(y1-y2))

     

    输出格式:

     

    一个数,表示要跑的最少距离,保留2位小数。

     

    输入输出样例

    输入样例#1: 复制
    4
    1 1
    1 -1
    -1 1
    -1 -1
    输出样例#1: 复制
    7.41
    思路:搜索。
    #include<cmath>
    #include<cstdio>
    #include<cstring>
    #include<iostream>
    #include<algorithm>
    using namespace std;
    int n;
    double ans=0x7f7f7f7f;
    struct nond{
        double x,y;
    }cnt[16];
    int vis[16];
    double dis[16][16];
    void dfs(int tot,double sum,int pre){
        if(sum>ans)    return ; 
        if(tot==n){
            ans=min(ans,sum);
            return ;
        }
        for(int i=1;i<=n;i++)
            if(!vis[i]){
                vis[i]=1;
                dfs(tot+1,sum+dis[pre][i],i);
                vis[i]=0;
            }
    } 
    int main(){
        scanf("%d",&n);
        cnt[0].x=0;cnt[0].y=0;
        for(int i=1;i<=n;i++)
            scanf("%lf%lf",&cnt[i].x,&cnt[i].y);
        for(int i=0;i<=n;i++)
            for(int j=i;j<=n;j++)
                dis[i][j]=dis[j][i]=sqrt((cnt[i].x-cnt[j].x)*(cnt[i].x-cnt[j].x)+(cnt[i].y-cnt[j].y)*(cnt[i].y-cnt[j].y));
        vis[0]=1;
        dfs(0,0,0);
        printf("%.2lf",ans); 
    }
     
    细雨斜风作晓寒。淡烟疏柳媚晴滩。入淮清洛渐漫漫。 雪沫乳花浮午盏,蓼茸蒿笋试春盘。人间有味是清欢。
  • 相关阅读:
    POJ 1003 解题报告
    POJ 1004 解题报告
    POJ-1002 解题报告
    vi--文本编辑常用快捷键之光标移动
    常用图表工具
    September 05th 2017 Week 36th Tuesday
    September 04th 2017 Week 36th Monday
    September 03rd 2017 Week 36th Sunday
    September 02nd 2017 Week 35th Saturday
    September 01st 2017 Week 35th Friday
  • 原文地址:https://www.cnblogs.com/cangT-Tlan/p/7899897.html
Copyright © 2011-2022 走看看