poj 3311 2进制状态压缩dp,tsp
2015-06-04 21:45
295 查看
题意:
TSP,每个点只能经过一次。
解析:
2进制状态压缩dp,1表示当前点访问过,0表示未访问过。
dp[ j ] [ state ] 表示起点为 j ,状态为 state 时的最小花费。
状态转移方程:
dp [ j ] [ state ] = min ( dp[ j ] [ state ], dp[ k ] [ state ^ (1 << j ) ] + g[ k ] [ j ] )
意义是,从 之前没有加入 j 时的点k + k到j的距离,取小。
代码:
TSP,每个点只能经过一次。
解析:
2进制状态压缩dp,1表示当前点访问过,0表示未访问过。
dp[ j ] [ state ] 表示起点为 j ,状态为 state 时的最小花费。
状态转移方程:
dp [ j ] [ state ] = min ( dp[ j ] [ state ], dp[ k ] [ state ^ (1 << j ) ] + g[ k ] [ j ] )
意义是,从 之前没有加入 j 时的点k + k到j的距离,取小。
代码:
#include <iostream> #include <cstdio> #include <cstdlib> #include <algorithm> #include <cstring> #include <cmath> #include <stack> #include <vector> #include <queue> #include <map> #include <climits> #include <cassert> #define LL long long #define lson lo, mi, rt << 1 #define rson mi + 1, hi, rt << 1 | 1 using namespace std; const int inf = 0x3f3f3f3f; int dp[12][1 << 12]; int g[12][12]; int n; void floyd() { for (int k = 0; k <= n; k++) { for (int i = 0; i <= n; i++) { for (int j = 0; j <= n; j++) { g[i][j] = min(g[i][k] + g[k][j], g[i][j]); } } } } int main() { #ifdef LOCAL freopen("in.txt", "r", stdin); #endif // LOCAL while (~scanf("%d", &n) && n) { memset(dp, inf, sizeof(dp)); for (int i = 0; i <= n; i++) { for (int j = 0; j <= n; j++) { scanf("%d", &g[i][j]); } } floyd(); for (int i = 0; i <= n; i++) dp[i][1 << i] = g[0][i]; int s = (1 << (n + 1)); for (int state = 0; state < s; state++) { for (int j = 0; j <= n; j++) { for (int k = 0; k <= n; k++) { // cout << state << " " << j << " " << k << endl; if (state & (1 << j)) { ///去掉j这个点的状态下,从中间点k到j dp[j][state] = min(dp[j][state], dp[k][state ^ (1 << j)] + g[k][j]); } } } } printf("%d\n", dp[0][s - 1]);//所有状态为11...1 = s - 1 } return 0; }
相关文章推荐
- MySQL行级锁、表级锁、页级锁详细介绍
- c语言一起学习之建立头文件(二)
- Ueditor结合七牛云及百度云存储(JAVA版,ueditor-1.4.3)实现图片文件上传
- 【分布式存储系统sheepdog 】
- 寻找水王
- CS小分队第二阶段冲刺站立会议(6月4日)
- 事务隔离性和锁的区别和联系
- 使用Unity3D编写ARPG游戏——角色属性的定义与实现(二)
- 【转】Linux里如何查找文件内容
- Linux正则表达式-重复出现的字符
- H.264/ACC音视频编码流的RTP/RTSP传输实现(2)
- 可执行程序的入口点
- 是的
- 《C++ primer》第五版 第三章 笔记
- Java SWT事件
- 4.19&&4.20
- 使用nTopng
- 实现医技工作站的X光检查功能的代码(十七)
- DiskLruCache
- BZOJ 1668: [Usaco2006 Oct]Cow Pie Treasures 馅饼里的财富( dp )