点集配对问题 状压DP
来源:互联网 发布:软件详细设计模板 编辑:程序博客网 时间:2024/05/29 15:08
大白P61,空间里有n个点P0,P1,...,Pn-1,把它们两两配对,要求所有的点对距离之和最小。其中n<=20.
分析:dp[s]表示集合s配对后的最小距离之和,状态转移方程为dp[s]=min(dp[s],dp[s^(1<<i)^(1<<j)]+dis(i,j)),其中i<j。
注意这里i是不需要枚举的,因为i最后都是要配对的,无须枚举。
代码:
#include <iostream>#include <functional>#include <cstdio>#include <cstring>#include <algorithm>#include <cmath>#include <string>#include <map>#include <stack>#include <vector>#include <set>#include <queue>#pragma comment (linker,"/STACK:102400000,102400000")#define pi acos(-1.0)#define eps 1e-6#define lson rt<<1,l,mid#define rson rt<<1|1,mid+1,r#define FRE(i,a,b) for(i = a; i <= b; i++)#define FREE(i,a,b) for(i = a; i >= b; i--)#define FRL(i,a,b) for(i = a; i < b; i++)#define FRLL(i,a,b) for(i = a; i > b; i--)#define mem(t, v) memset ((t) , v, sizeof(t))#define sf(n) scanf("%d", &n)#define sff(a,b) scanf("%d %d", &a, &b)#define sfff(a,b,c) scanf("%d %d %d", &a, &b, &c)#define pf printf#define DBG pf("Hi\n")typedef long long ll;using namespace std;#define INF 1<<30#define mod 1000000009const int maxn = 1005;const int MAXN = 2005;const int MAXM = 200010;const int N = 1005;struct Node{ double x,y;}node[22];int n;double dp[(1<<20)+10];double Dis(Node a,Node b){ return sqrt((a.x-b.x)*(a.x-b.x)+(a.y-b.y)*(a.y-b.y));}void solve(){ int i,j; int m=1<<n; for (i=0;i<m;i++) dp[i]=INF; dp[0]=0; for (int s=0;s<m;s++) { for (i=0;i<n;i++) if (s&(1<<i)) break; for (j=i+1;j<n;j++) { if (s&(1<<j)) { dp[s]=min(dp[s],dp[s^(1<<i)^(1<<j)]+Dis(node[i],node[j])); } } }}int main(){//#ifndef ONLINE_JUDGE// freopen("C:/Users/lyf/Desktop/IN.txt","r",stdin);//#endif int i,j; while (~scanf("%d",&n)) { for (i=0;i<n;i++) scanf("%lf%lf",&node[i].x,&node[i].y); solve(); printf("%f\n",dp[(1<<n)-1]); } return 0;}
1 0
- 点集配对问题 状压DP
- 点集配对问题(状压dp)
- 点集配对问题 集合DP 按位DP
- 点集配对问题
- Most Powerful (zoj 3471 状压dp 点集配对)
- 点集配对 【dp 位运算】
- 状态压缩dp 最优配对问题
- Uva 10911 Forming Quiz Teams(状压dp 最优配对问题)
- 最优配对问题(集合上的动态规划) —— 状压DP
- 集合DP 点集匹配问题
- UVA 10911 Forming Quiz Teams(dp + 集合最优配对问题)
- 【bzoj1237】【scoi2008】【配对】【dp】
- [BZOJ1786&&BZOJ1831]配对 dp
- BZOJ1237 配对 [DP]
- bzoj1237 wikioi2430 [SCOI2008]配对 dp
- 【bzoj 1237】[SCOI2008]配对 dp
- [BZOJ1237][SCOI2008]配对(dp)
- poj 1141 DP 括号配对
- Java提高篇(三五)-----Java集合细节(一):请为集合指定初始容量
- DButils使用详解
- Android客户端采用RestTemplate实现附件的上传
- mac maven 控制台提示信息乱码解决
- 注解学习二:注解(Annotation)自定义注解入门
- 点集配对问题 状压DP
- 框架模式 MVC 在Android中的使用
- Eclipse的Debug介绍与技巧
- 搜索引擎的难点
- 算法导论主定理证明(3)
- 我的第一篇博客(附Android Studio的下载链接)
- Linux ALSA 声卡驱动之二:声卡的创建
- 关于 Swift(About Swift)
- Java数据类型和位运算