Painting A Board(状压dp)
2016-05-08 16:45
459 查看
题目大意
在一个二维图中有n*2个人,分别在不同的位置。现在需要进行两两配对,dis[i][j]表示这两个人之间的直线距离,问最小的配对距离和。最小配对距离:指的是所有相互配对的两人之间的距离和。
思路:
因为只有20个人,所以可以用状压dp来做。
>dp[sta] = min(dp[sta], solve(sta ^ (1<<i) ^ (1<<j))+ dis[i][j]);
int nCase = 0; const int maxn = 666666; double dp[maxn], dis[21][21]; int x[21], y[21]; int n; double solve(int sta) { if (dp[sta] != -1) return dp[sta]; dp[sta] = INF; for (int i = 0;i < n;++i) { if (sta & (1 << i)) { for (int j = 0;j < n;++j) { if ((sta & (1 << j)) && i != j) dp[sta] = min(dp[sta], solve(sta ^ (1<<i) ^ (1<<j)) + dis[i][j]); } } } return dp[sta]; } double mul(double xx) {return xx*xx;} int main(int argc, const char * argv[]) { freopen("in.txt","r",stdin); // freopen("out.txt","w",stdout); while(scanf("%d", &n) && n) { n <<= 1; char name[100]; for (int i = 0;i < n;++i) scanf("%s%d%d", name, &x[i], &y[i]); int ed = (1 << n) - 1; for (int i = 0;i < n;++i) { for (int j = 0;j < n;++j) dis[i][j] = sqrt(mul(x[i] - x[j]) + mul(y[i] - y[j])); } for (int i = 0;i <= ed;++i) dp[i] = -1; dp[0] = 0; solve(ed); printf("Case %d: %.2lf\n", ++nCase, dp[ed]); } return 0; }
相关文章推荐
- 70. Climbing Stairs
- ERROR [main] zookeeper.RecoverableZooKeeper: ZooKeeper create failed after 4 attempts
- linker command failed with exit code 1 (use -v to see invocation)
- ultraiso软碟通 无法保存hfs文件卷
- Commit failed with error: did not match any file(s) known to git. 解决办法
- main函数的参数
- 笔记:Semi-supervised domain adaptation with subspace learning for visual recognition (cvpr15)
- 笔记:Beyond sharing weights for deep domain adaptation
- HDU 2057 A + B Again(16进制加法)
- Kafka设计解析(三)- Kafka High Availability (下)
- Kafka设计解析(二)- Kafka High Availability (上)
- RAID介绍
- 用CSAI_BOM_READ读取WBS元素BOM
- 用CSAI_BOM_MAINTAIN修改WBS BOM
- 用CSAI_BOM_DELETE删除WBS元素BOM
- 用CSAI_BOM_CREATE创建WBS元素BOM
- 启动hadoop时候报错:localhost: ssh: Could not resolve hostname localhost: Temporary failure in name resolution”
- ultraiso软碟通dmg转iso图文教程
- VMware Workstation 不可恢复错误: (vcpu-0) vcpu-0:VERIFY vmcore/vmm/main/physMem_monitor.c:1123
- AIX后台执行命令中4种方式