nyoj--7 街区最短路径问题(枚举 or math)
2016-02-28 11:11
381 查看
nyoj 7
发现别人一种更优解法。
设邮局坐标(x,y),问题转化为求解 min(∑|xi−x|)+min(∑|yi−y|)
题目性质,这里x,y可分别求解,这式子可以表示为数轴上有n个点,求一点到其他各点的距离之和最小。
如果n为奇数,这点就是中间一点,否则是中间两点的中间点,两种情况下都有 最小和 = ∑n/2i=1(xn−i−xi) .
画下图不难理解。
题解
暴力枚举。#include <iostream> #include <cstdio> #include <fstream> #include <cstring> #include <set> #include <cmath> #include <algorithm> using namespace std; const int maxn = 20; const int inf = 1 << 30; int x[maxn], y[maxn], n; int calc(int i, int j){ int sum = 0; for(int k = 0; k < n; ++k) { sum += abs(i - x[k]) + abs(j - y[k]); } return sum; } int main() { //fstream cin("data.in"); int t; for(cin >> t; t--; ) { cin >> n; for(int i = 0; i < n; ++i){ cin >> x[i] >> y[i]; } int ans = inf; for(int i = 0; i < 100; ++i) { for(int j = 0; j < 100; ++j) { int tmp = calc(i, j); ans = min(ans, tmp); } } cout << ans << endl; } return 0; }
发现别人一种更优解法。
设邮局坐标(x,y),问题转化为求解 min(∑|xi−x|)+min(∑|yi−y|)
题目性质,这里x,y可分别求解,这式子可以表示为数轴上有n个点,求一点到其他各点的距离之和最小。
如果n为奇数,这点就是中间一点,否则是中间两点的中间点,两种情况下都有 最小和 = ∑n/2i=1(xn−i−xi) .
画下图不难理解。
#include <iostream> #include <cstdio> #include <fstream> #include <cstring> #include <set> #include <cmath> #include <algorithm> using namespace std; const int maxn = 20; const int inf = 1 << 30; int x[maxn], y[maxn], n; int main() { //fstream cin("data.in"); int t; for(cin >> t; t--; ) { cin >> n; for(int i = 0; i < n; ++i) cin >> x[i] >> y[i]; sort(x, x + n); sort(y, y + n); int ans = 0; for(int i = 0; i < n / 2; ++i) ans += x[n - 1 - i] - x[i] + y[n - 1 - i] - y[i]; cout << ans << endl; } return 0; }
相关文章推荐
- 微软Word 2007数学插件 Microsoft Math 提供下载
- RM格式压缩电影软件 Easy RealMedia Producer Full V1.94 下载
- 关于C# Math 处理奇进偶不进的实现代码
- JavaScript中的Math.SQRT1_2属性使用简介
- JavaScript Math.ceil() 函数使用介绍
- 与Math.pow 相反的函数使用介绍
- 在IE 浏览器中使用 jquery的fadeIn() 效果 英文字符字体加粗
- JavaScript中使用指数方法Math.exp()的简介
- 比较简单的jquery教程 Easy Ajax with jQuery 中文版全集第1/3页
- Easy RM RMVB to DVD Burner v1.3.8 汉化版 下载 附注册码
- JavaScript使用Math.Min返回两个数中较小数的方法
- Ajax获取页面被缓存的解决方法
- JavaScript高级程序设计 阅读笔记(十二) js内置对象Math
- JavaScript中Math对象使用说明
- javascript对象之内置对象Math使用方法
- 基于java math API 的详细解释说明
- 简介JavaScript中用于处理正切的Math.tan()方法
- 浅谈JavaScript中的Math.atan()方法的使用
- PHP内置的Math函数效率测试
- 在JavaScript中使用对数Math.log()方法的教程