首页 > 学院 > 开发设计 > 正文

洛谷P1433 吃奶酪

2019-11-11 05:27:57
字体:
来源:转载
供稿:网友

题目描述

房间里放着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+剪枝

#include <iostream>#include <cstdio>#include <cmath>using namespace std;int n;double ans = 0x7f7f7f7f;double x[20], y[20];bool vis[20];int dfs(int t, double tx, double ty, double sum){ if (t > n) { ans = min(sum, ans); return 0; } if (sum > ans) return 0; for (int i = 1; i <= n; i++) { if (vis[i] == false) { vis[i] = true; dfs(t+1, x[i], y[i], sum+sqrt((x[i]-tx)*(x[i]-tx)+(y[i]-ty)*(y[i]-ty))); vis[i] = false; } } return 0;}int main(){ cin >> n; for (int i = 1; i <= n; i++) cin >> x[i] >> y[i]; dfs(1,0,0,0); PRintf("%.2lf/n", ans); return 0;}
发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表