zoukankan      html  css  js  c++  java
  • 题解 P1433 【吃奶酪】

    首先,我确定我的不是最优解,但最好写。看到楼上DALAO用记忆化搜索和状压DP本蒟蒻感到瑟瑟发抖,这好似是一个简单的DFS问题,乍一看数据我稍有担忧,但是洛谷有全宇宙最快的评测机我就放心提交了。(第9个点400ms)详情看代码。

    #include<bits/stdc++.h>
    using namespace std;
    bool book[105];int shu;//book用来记录这个点是否到过、
    double ans=10000;//ans要初始化
    struct point{
        double x,y;
    }a[105];//用一个结构体记录点更直观,看到别的DALAO用二维数组感觉不好理解。这里就是a[i].x/a[i].y代表第i个点的x/y坐标。
    double ls(int id1,int id2)
    {
        return sqrt((a[id1].x-a[id2].x)*(a[id1].x-a[id2].x)*1.0+(a[id1].y-a[id2].y)*(a[id1].y-a[id2].y)*1.0);
    }//结构体版的两点距离公式
    void dfs(int now,int k,double s)//now代表现在所处在点的id,k代表下一个的id,s就是路程
    {
        if(s>ans)return;//如果距离已经大于ans了就可以返回了。剪枝思想
        if(k>=shu)
        {
            ans=min(ans,s);
            return;
        }//计算长度
        for(int i=1;i<=shu;i++)
        {
            if(book[i]==1)continue;//如果到过就返回
            s+=ls(now,i);book[i]=1;//存储状态
            dfs(i,k+1,s);
            s-=ls(now,i);book[i]=0;//恢复状态
        }
    }
    int main()//简洁的主函数
    {
        a[0].x=0;
        a[0].y=0;//初始化出发点
        cin>>shu;
        for(int i=1;i<=shu;i++)
            cin>>a[i].x>>a[i].y;//输入数
        book[0]=1;//保存出发点状态
        dfs(0,0,0.0);//dfs
        printf("%.2lf",ans);//输出
    }
    
  • 相关阅读:
    js选中文本的功能
    css中2端对其布局
    融合渐变轮播图和左右点击轮播图的js
    Hibernate入门一
    SpringDay01
    使用DoTwenn动画的不正常播放
    转载 利用WWW类获取图片并且在unityUGUI的Image中显示
    转载 Unity进阶技巧
    Unity中导入iTween插件问题
    转载 [Unity3D]引擎崩溃、异常、警告、BUG与提示总结及解决方法
  • 原文地址:https://www.cnblogs.com/Douglas-Zhou/p/P1433.html
Copyright © 2011-2022 走看看