洛谷P1433 吃奶酪 题解 状态压缩DP】的更多相关文章

题目链接:https://www.luogu.com.cn/problem/P1433 题目大意 房间里放着 \(n\) 块奶酪.一只小老鼠要把它们都吃掉,问至少要跑多少距离?老鼠一开始在 \((0,0)\) 点处. 输入格式 第一行一个正整数 \(n\). 接下来每行 \(2\) 个实数,表示第 \(i\) 块奶酪的坐标. 两点之间的距离公式为 \(\sqrt{(x_1-x_2)^2+(y_1-y_2)^2}\). 输出格式 一个数,表示要跑的最少距离,保留 \(2\) 位小数. 解题思路 定…
题目描述 房间里放着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<iostrea…
题目链接:https://www.luogu.org/problemnew/show/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…
题目描述 分析 比较简单的状压DP 我们设\(f[i][j]\)为当前的状态为\(i\)且当前所在的位置为\(j\)时走过的最小距离 因为老鼠的坐标为\((0,0)\),所以我们要预处理出\(f[1<<(i-1)][i] (1 \leq i \leq n)\)的值 同时在读入的时候顺便处理处任意两个奶酪之间的距离 下面是状态转移方程 for(int i=1;i<(1<<n);i++){ for(int j=1;j<=n;j++){ if((i&(1<<…
嗯?这题竟然是个绿题. 这个题真的不难,不要被他的难度吓到,我们只是不会计算2点之间的距离,他还给出了公式,这个就有点…… 我们直接套公式去求出需要的值,然后普通的搜索就可以了. 这个题我用的深搜,因为广搜没什么意义. #include<iostream> #include<string> #include<algorithm> #include<cmath> #include<cstdio> struct z { double x,y; }g[…
题目:https://www.luogu.org/problemnew/show/P1433 题意: 给定n个坐标,要求从(0,0)开始走遍所有点,最少经过的路程. 思路: 刚开始想像数字三角形一样适用next_permutation,枚举坐标的顺序,一旦出现距离比当前最优解要差时就sort剪枝. 这里sort的起始和结束要注意一下,和那道题不一样.开始应该是i+1 但是还是有一个点会TLE.毕竟sort了一下还是会慢一点...? 所以还是老老实实dfs吧.道理都是一样的,搜索走的下标排列,一旦…
题目描述 房间里放着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   dfs 屠龙宝刀点击就送 #incl…
https://www.luogu.org/problemnew/show/P1433 并不是每一个求最短距离就是bfs,这个肯定是dfs. 直接计算15!可以知道枚举必定超时,但是! 我们dfs非常方便最优性剪枝! 这个是不加最优性剪枝的版本,果断T了: #include<bits/stdc++.h> using namespace std; #define ll long long inline double sq(double d){ return d*d; } int n; struc…
题目描述 房间里放着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解题思路:记忆化搜索,看代码(注释)AC代…
#include<iostream> #include<math.h> using namespace std ; ; int n; bool st[N]; double x[N]; double y[N]; double dis[N][N]; double ans=123123123.0; void dfs(int step,int now,double len) //step为走的步数,now为此时的点,len为长度 { if(len>ans) return ; if(s…