UVA - 10911 Forming Quiz Teams
来源:互联网 发布:软件白名单 编辑:程序博客网 时间:2024/06/04 13:18
题目大意:有 2 * n 个点,使其组成 n 对,求 n 对点集的最小距离之和.
解题思路:由于 2 * n 最大才 20,完全可以由数字的位来表示,每一个数字表示一个状态,然后才去记忆化搜索的方式得出结果。
#include <cstdio>#include <cstring>#include <cmath>#include <algorithm>using namespace std;int N;double DP[1 << 17], dis[20][20];double cal(int x, int y) { return sqrt(x * x + y * y);}double DPS(int S) { if (DP[S] || !S) return DP[S]; int i; for (i = N - 1; i >= 0; i--) if (S & (1 << i)) break; DP[S] = 0x3f3f3f3f; for (int j = i - 1; j >= 0; j--) if (S & (1 << j)) DP[S] = min(DP[S], dis[i][j] + DPS(S ^ (1 << i) ^ (1 << j))); return DP[S];}int main() { int x[20], y[20], kase = 0; while (scanf("%d", &N), N) { N <<= 1; for (int i = 0; i < N; i++) scanf("%*s%d%d", &x[i], &y[i]); for (int i = 0; i < N; i++) for (int j = i + 1; j < N; j++) dis[j][i] = cal(x[i] - x[j], y[i] - y[j]); memset(DP, 0, sizeof(DP)); printf("Case %d: %.2lf\n", ++kase, DPS((1 << N) - 1)); } return 0;}
0 0
- uva 10911 Forming Quiz Teams
- UVA 10911 Forming Quiz Teams
- uva 10911 Forming Quiz Teams
- UVa 10911 - Forming Quiz Teams
- UVA 10911 - Forming Quiz Teams
- UVA - 10911 Forming Quiz Teams
- UVA 10911 - Forming Quiz Teams
- uva 10911 - Forming Quiz Teams
- UVA - 10911 Forming Quiz Teams
- UVA - 10911 Forming Quiz Teams
- UVA 10911 Forming Quiz Teams
- uva 10911Forming Quiz Teams
- UVa:10911 Forming Quiz Teams(状态压缩)
- UVA-10911 - Forming Quiz Teams(状态压缩)
- Forming Quiz Teams - UVa 10911 状压dp
- UVA - 10911 Forming Quiz Teams 状态压缩
- UVa 10911 Forming Quiz Teams(dfs)
- UVa 10911 Forming Quiz Teams [DP]
- hdu 2115 I Love This Game
- C++对C的函数拓展 - 默认参数
- 1. 为什么选择RTX
- Dubbo源码阅读体会(一)
- Jackson fasterxml和codehaus的区别 (fasterxml vs. codehaus)
- UVA - 10911 Forming Quiz Teams
- Java多线程的基本概述以及创建
- UVa 12589 Learning Vector
- String、CString、char*、int、float、double相互转换
- 解读BOM与COM
- 素数打表 cf 546D
- java对象的内存布局(一):计算java对象占用的内存空间以及java object layout工具的使用
- 使用通知中心NSNotificationCenter实现不同的视图控制器的参数传递
- svn提交代码出错