洛谷P1433 吃奶酪【dfs】【剪枝】
题目: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】【剪枝】的更多相关文章
- 洛谷 - P1433 - 吃奶酪 - dfs
https://www.luogu.org/problemnew/show/P1433 并不是每一个求最短距离就是bfs,这个肯定是dfs. 直接计算15!可以知道枚举必定超时,但是! 我们dfs非常 ...
- 洛谷 P1433 吃奶酪【DFS】+剪枝
题目链接:https://www.luogu.org/problemnew/show/P1433 题目描述 房间里放着n块奶酪.一只小老鼠要把它们都吃掉,问至少要跑多少距离?老鼠一开始在(0,0)点处 ...
- 洛谷 P1433 吃奶酪 Label:dfs && 剪枝Ex
题目描述 房间里放着n块奶酪.一只小老鼠要把它们都吃掉,问至少要跑多少距离?老鼠一开始在(0,0)点处. 输入输出格式 输入格式: 第一行一个数n (n<=15) 接下来每行2个实数,表示第i块 ...
- 洛谷 P1433 吃奶酪(记忆化)
题目描述 房间里放着n块奶酪.一只小老鼠要把它们都吃掉,问至少要跑多少距离?老鼠一开始在(0,0)点处. 输入输出格式 输入格式: 第一行一个数n (n<=15) 接下来每行2个实数,表示第i块 ...
- 集训作业 洛谷P1433 吃奶酪
嗯?这题竟然是个绿题. 这个题真的不难,不要被他的难度吓到,我们只是不会计算2点之间的距离,他还给出了公式,这个就有点…… 我们直接套公式去求出需要的值,然后普通的搜索就可以了. 这个题我用的深搜,因 ...
- 洛谷 P1433 吃奶酪
题目描述 房间里放着n块奶酪.一只小老鼠要把它们都吃掉,问至少要跑多少距离?老鼠一开始在(0,0)点处. 输入输出格式 输入格式: 第一行一个数n (n<=15) 接下来每行2个实数,表示第i块 ...
- 洛谷P1433 吃奶酪 题解 状态压缩DP
题目链接:https://www.luogu.com.cn/problem/P1433 题目大意 房间里放着 \(n\) 块奶酪.一只小老鼠要把它们都吃掉,问至少要跑多少距离?老鼠一开始在 \((0, ...
- 洛谷P1433 吃奶酪
#include<iostream> #include<math.h> using namespace std ; ; int n; bool st[N]; double x[ ...
- 洛谷 P1433 吃奶酪 状压DP
题目描述 分析 比较简单的状压DP 我们设\(f[i][j]\)为当前的状态为\(i\)且当前所在的位置为\(j\)时走过的最小距离 因为老鼠的坐标为\((0,0)\),所以我们要预处理出\(f[1& ...
随机推荐
- ORA-19602: cannot backup or copy active file in NOARCHIVELOG mode
备份数据库,报错如下 RMAN> backup database; Starting backup at -JAN- allocated channel: ORA_DISK_1 channel ...
- linux下使用mingw编译NSIS-3.03
简述 最近在研究使用NSIS做安装包,语法不算复杂,插件也很多,中文资料也不少,还挺好用的.先后用NSIS做出了安装和卸载需要输入密码,通过自定义页面实现安装时候选择多个目录.安装的时候输入配置文件信 ...
- CentOS7下 让Docker pull命令使用squid做http代理拉取目标镜像仓库的镜像
场景,如下图所示: 服务器B具有两个网卡,分别和服务器A和服务器C互通,这里想要在服务器C上借助服务器B作为桥梁,拉取镜像仓库服务器A上的镜像. 思路也很简单,在服务器上搭建HTTP代理服务,服务器C ...
- JavaScript深入系列15篇
JavaScirpt深入之从原型到原型链 构造函数创建对象 我们先使用构造函数创建一个对象: function Person() { } var person = new Person(); pers ...
- InnoDB 存储引擎的主要知识点介绍
本文转载自:Draveness,略有修改 原文链接:『浅入浅出』MySQL 和 InnoDB · 面向信仰编程 作为一名开发人员,在日常的工作中会难以避免地接触到数据库,无论是基于文件的 sqlite ...
- C#去除HTML标签
public static string ReplaceHtmlTag(string html, int length = 0) { string strText = System.Text.Regu ...
- 2D空间中求两圆的交点
出处:https://stackoverflow.com/questions/19916880/sphere-sphere-intersection-c-3d-coordinates-of-colli ...
- [svc]linux上vxlan实战
linux vxlan实现2台机器的通往段ip互通 - 在n1上 ip l a vxlan0 type vxlan id 42 dstport 4789 remote 192.168.1.12 loc ...
- [k8s] 最简单的集群小案例-记录本(tomcat+mysql)
启动一个简单的集群: tomcat+mysql myweb-pod.yaml apiVersion: v1 kind: Pod metadata: name: myweb labels: app: m ...
- Socket网络编程--聊天程序(1)
很早的一段时间,看了APUE和UNPv1了解了网络编程,但是但是只是看而已,没有具体的实践,趁现在没有什么事做,就来实践了解一下网络编程.写博客保存下来,方便以后用到的时候可以查到. 此次的聊天程序是 ...