题目https://www.luogu.org/problemnew/show/P1433

题意

给定n个坐标,要求从(0,0)开始走遍所有点,最少经过的路程。

思路:

刚开始想像数字三角形一样适用next_permutation,枚举坐标的顺序,一旦出现距离比当前最优解要差时就sort剪枝。

这里sort的起始和结束要注意一下,和那道题不一样。开始应该是i+1

但是还是有一个点会TLE。毕竟sort了一下还是会慢一点...?

所以还是老老实实dfs吧。道理都是一样的,搜索走的下标排列,一旦出现比最优解差就直接回溯。

 #include<stdio.h>
#include<stdlib.h>
#include<map>
#include<set>
#include<iostream>
#include<cstring>
#include<algorithm>
#include<vector>
#include<cmath>
#include<queue> #define inf 0x7f7f7f7f
using namespace std;
typedef long long LL;
typedef pair<int, int> pr; int n;
struct node{
double x, y;
}pos[];
int per[];
double d[][]; double dist(node a, node b)
{
return sqrt((a.x - b.x) * (a.x - b.x) + (a.y - b.y) * (a.y - b.y));
} bool cmp(int a, int b)
{
return a > b;
} bool vis[];
double ans = inf;
void dfs(int pre, int m, double res)
{
if(res > ans)return;
if(m == n){
ans = min(ans, res);
return;
}
for(int i = ; i <= n; i++){
if(!vis[i]){
vis[i] = true;
dfs(i, m + , res + d[pre][i]);
vis[i] = false;
}
}
return;
} int main()
{
scanf("%d", &n);
pos[].x = ;
pos[].y = ;
// node st;
// st.x = 0;st.y = 0;
for(int i = ; i <= n; i++){
scanf("%lf%lf", &pos[i].x, &pos[i].y);
per[i] = i;
}
for(int i = ; i <= n; i++){
for(int j = i + ; j <= n; j++){
d[i][j] = d[j][i] = dist(pos[i], pos[j]);
}
} dfs(, , ); // double ans = inf;
// do{
// double tmp = 0;
// //double tmp = dist(st, pos[per[1]]);
// for(int i = 1; i < n; i++){
// tmp += d[per[i]][per[i + 1]];
// //tmp += dist(pos[per[i]], pos[per[i + 1]]);
// if(tmp > ans){
// sort(per + i + 1, per + 1 + n, cmp);
// break;
// }
// }
//// for(int i = 1; i <= n; i++){
//// cout<<per[i]<<" ";
//// }
//// cout<<endl;
//// if(tmp < ans){
////
//// }
// //tmp += dist(st, pos[per[1]]);
// tmp += d[0][per[1]];
// ans = min(ans, tmp);
// }while(next_permutation(per + 1, per + 1 + n)); printf("%.2lf\n", ans);
return ;
}

洛谷P1433 吃奶酪【dfs】【剪枝】的更多相关文章

  1. 洛谷 - P1433 - 吃奶酪 - dfs

    https://www.luogu.org/problemnew/show/P1433 并不是每一个求最短距离就是bfs,这个肯定是dfs. 直接计算15!可以知道枚举必定超时,但是! 我们dfs非常 ...

  2. 洛谷 P1433 吃奶酪【DFS】+剪枝

    题目链接:https://www.luogu.org/problemnew/show/P1433 题目描述 房间里放着n块奶酪.一只小老鼠要把它们都吃掉,问至少要跑多少距离?老鼠一开始在(0,0)点处 ...

  3. 洛谷 P1433 吃奶酪 Label:dfs && 剪枝Ex

    题目描述 房间里放着n块奶酪.一只小老鼠要把它们都吃掉,问至少要跑多少距离?老鼠一开始在(0,0)点处. 输入输出格式 输入格式: 第一行一个数n (n<=15) 接下来每行2个实数,表示第i块 ...

  4. 洛谷 P1433 吃奶酪(记忆化)

    题目描述 房间里放着n块奶酪.一只小老鼠要把它们都吃掉,问至少要跑多少距离?老鼠一开始在(0,0)点处. 输入输出格式 输入格式: 第一行一个数n (n<=15) 接下来每行2个实数,表示第i块 ...

  5. 集训作业 洛谷P1433 吃奶酪

    嗯?这题竟然是个绿题. 这个题真的不难,不要被他的难度吓到,我们只是不会计算2点之间的距离,他还给出了公式,这个就有点…… 我们直接套公式去求出需要的值,然后普通的搜索就可以了. 这个题我用的深搜,因 ...

  6. 洛谷 P1433 吃奶酪

    题目描述 房间里放着n块奶酪.一只小老鼠要把它们都吃掉,问至少要跑多少距离?老鼠一开始在(0,0)点处. 输入输出格式 输入格式: 第一行一个数n (n<=15) 接下来每行2个实数,表示第i块 ...

  7. 洛谷P1433 吃奶酪 题解 状态压缩DP

    题目链接:https://www.luogu.com.cn/problem/P1433 题目大意 房间里放着 \(n\) 块奶酪.一只小老鼠要把它们都吃掉,问至少要跑多少距离?老鼠一开始在 \((0, ...

  8. 洛谷P1433 吃奶酪

    #include<iostream> #include<math.h> using namespace std ; ; int n; bool st[N]; double x[ ...

  9. 洛谷 P1433 吃奶酪 状压DP

    题目描述 分析 比较简单的状压DP 我们设\(f[i][j]\)为当前的状态为\(i\)且当前所在的位置为\(j\)时走过的最小距离 因为老鼠的坐标为\((0,0)\),所以我们要预处理出\(f[1& ...

随机推荐

  1. SpringCloud Stream生产者配置RabbitMq的动态路由键

    在写这个文章前不得不吐槽目前国内一些blog的文章,尽是些复制粘贴的文章,提到点上但没任何的深入和例子.......... 经过测试下来总结一下RabbitMQ的Exchange的特性: 1.dire ...

  2. MySQL 四种事务隔离级的说明[转]

    很早之前写的文章,重新回顾和学习下: 按照SQL:1992 事务隔离级别,InnoDB默认是可重复读的(REPEATABLE READ).MySQL/InnoDB 提供SQL标准所描述的所有四个事务隔 ...

  3. WEB前端工程师的职业发展路线图、怎样做WEB前端职业规划

    20151028整理 —————————— 知乎-Web前端的路该怎么走?(2015年发表) 在规模越大的团队,工作划分得越细腻,专注的点就越深,但同时就可能会被限制在某个狭窄点上,成为某个角落的技术 ...

  4. mac 安装memcached以及启动memcached

    参考链接:https://blog.csdn.net/whereismatrix/article/details/50485570

  5. 引导修复软件boot-repair

    因为经常需要安装双系统win10+ubuntu,平时按照先win10,在ubuntu的顺序,是非常顺利的,grub非常智能也非常友好的帮助你双启动这2个系统. 但是,难免会有意外,比如,win10有了 ...

  6. C#根据字符串名称 得到对应的方法

    public string GetMethod(string methodName, BookingRequest bookingId) { EmailTemplate p1 = new EmailT ...

  7. 初识HTTPS

    初识HTTPS HTTPS也被叫做“基于TLS的HTTP,基于SSL的HTTP,HTTP安全“,它是一个在Internet上广泛使用的计算机网络安全通信协议. 即HTTPS是HTTP的安全版本,在了解 ...

  8. Flink source task 源码分析

    http://vinoyang.com/2016/05/05/flink-stream-source/ http://vinoyang.com/2016/12/28/flink-runtime-com ...

  9. 20款最好的jQuery文件上传插件

    当它是关于开发网络应用程序和网页的时候,文件上传功能的重要性是不容忽视的.一个文件上传功能可以让你上传所有类型的文件在网站上,包括视频,图像,文件和更多.创建一个文件上传功能,对你的网站是不是很难,有 ...

  10. 一个相对通用的JSON响应结构,其中包含两部分:元数据与返回值

    定义一个相对通用的JSON响应结构,其中包含两部分:元数据与返回值,其中,元数据表示操作是否成功与返回值消息等,返回值对应服务端方法所返回的数据. public class Response { pr ...