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 一开始回溯法显然超时然后加了…
题目链接:P1433 吃奶酪 我感觉可以改成:[模板]TSP问题(商旅问题) 了. 爆搜\(T\)一个点,考虑状压\(dp\)(还是爆搜). 我们用\(dp[i][j]\)表示现在是\(i\)状态,站在了\(j\)点. 那什么是状态呢? 我们用一个\(01\)串表示每一点有无被走过(\(0\)是没走过,\(1\)是已走过),那么转移方程就是: \[dp[i][j]=min(dp[i][j],dp[i\&((1<<n)-1-(1<<(j-1)))][k]+dis[j][k])…
题目链接: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…
嗯?这题竟然是个绿题. 这个题真的不(很)难,我们只是不会计算2点之间的距离,他还给出了公式,这个就有点…… 我们直接套公式去求出需要的值,然后普通的状压dp就可以了. 是的状压dp. 这个题的数据加强了,早已经不是搜索可以驾驭的了. 搜索的效率实在是有点低,我来算一个不准的效率,搜索的效率应该是O(n!).应该是吧. 状压dp只需要短短的O(2^n*n*n就可以了).状态共有2^n*n个,每次查找下一步需要O(n)的效率,所以状压dp的效率是O(2^n*n*n). 状压dp用一个二进制数表示哪…
题目描述 房间里放着n块奶酪.一只小老鼠要把它们都吃掉,问至少要跑多少距离?老鼠一开始在(0,0)点处. 输入格式: 第一行一个数n (n<=15) 接下来每行2个实数,表示第i块奶酪的坐标. 两点之间的距离公式=sqrt((x1-x2) * (x1-x2)+(y1-y2) * (y1-y2)) 输出格式: 一个数,表示要跑的最少距离,保留2位小数. 原题戳这里 深搜,记录上一个点和已经吃了多少块奶酪,再立一个flag,防止一块奶酪吃很多次 再就是剪枝,不剪枝会超时,如果距离已经大于了最小值,就…
题目描述 房间里放着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)开始走遍所有点,最少经过的路程. 思路: 刚开始想像数字三角形一样适用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解题思路:记忆化搜索,看代码(注释)AC代…
题目链接: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\) 位小数. 解题思路 定…
嗯?这题竟然是个绿题. 这个题真的不难,不要被他的难度吓到,我们只是不会计算2点之间的距离,他还给出了公式,这个就有点…… 我们直接套公式去求出需要的值,然后普通的搜索就可以了. 这个题我用的深搜,因为广搜没什么意义. #include<iostream> #include<string> #include<algorithm> #include<cmath> #include<cstdio> struct z { double x,y; }g[…