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); 
    }
     
    细雨斜风作晓寒。淡烟疏柳媚晴滩。入淮清洛渐漫漫。 雪沫乳花浮午盏,蓼茸蒿笋试春盘。人间有味是清欢。
  • 相关阅读:
    Commander Nodejs 命令行接口
    数据库集群 ---续集
    数据库集群
    实时查看linux下的日志
    自动化测试
    python中list和dict
    super与this的用法
    数据类型
    父类调用子类方法
    子类调用父类方法
  • 原文地址:https://www.cnblogs.com/cangT-Tlan/p/7899897.html
Copyright © 2011-2022 走看看