Vijos 1456 最小总代价(状态压缩DP)
2013-03-13 10:57
471 查看
题目链接
用二维数组表示,第一维表示状态,第二维表示此状态最后一个专递者。
状态转移为 if((~que1[j])&(1<<u))//开始这个判断想错了,一直RE。。。对位运算不熟啊。。
dp[que1[j]+(1<<u)][u] = min(dp[que1[j]+(1<<u)][u],dp[que1[j]][k]+p[k+1][u+1]);
用二维数组表示,第一维表示状态,第二维表示此状态最后一个专递者。
状态转移为 if((~que1[j])&(1<<u))//开始这个判断想错了,一直RE。。。对位运算不熟啊。。
dp[que1[j]+(1<<u)][u] = min(dp[que1[j]+(1<<u)][u],dp[que1[j]][k]+p[k+1][u+1]);
#include <cstdio> #include <cstring> #include <cmath> #include <string> using namespace std; #define INF 0x3f3f3f3f int p[20][20]; int dp[500000][17]; int que1[500000],que2[500000]; int o[500000]; int main() { int n,i,j,k,u,num,t; scanf("%d",&n); for(i = 1; i <= n; i ++) { for(j = 1; j <= n; j ++) scanf("%d",&p[i][j]); } for(i = 0; i < 1<<n; i ++) { for(j = 0; j < n; j ++) { dp[i][j] = INF; } } num = 0; for(i = 0; i < n;i ++) { dp[1<<i][i] = 0; que1[num++] = 1<<i; } for(i = 2;i <= n;i ++) { t = 0; for(j = 0;j < num;j ++) { for(k = 0;k < n;k ++) { for(u = 0;u < n;u ++) { if(k != u) { if((~que1[j])&(1<<u)) { dp[que1[j]+(1<<u)][u] = min(dp[que1[j]+(1<<u)][u],dp[que1[j]][k]+p[k+1][u+1]); if(!o[que1[j]+(1<<u)]) { o[que1[j]+(1<<u)] = 1; que2[t++] = que1[j]+(1<<u); } } } } } } num = t; for(j = 0;j < num;j ++) { que1[j] = que2[j]; que2[j] = 0; } } int ans = INF; for(i = 0;i < n;i ++) ans = min(dp[(1<<n)-1][i],ans); printf("%d\n",ans); return 0; } /* 16 -1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 -1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 -1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 -1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 -1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 -1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 -1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 -1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 -1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 -1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 -1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 -1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 -1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 -1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 -1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 -1 */
相关文章推荐
- vijos - P1456最小总代价 (状态压缩DP + 记忆化搜索)
- 哈希算法状态压缩dp vijos 1426
- 最小汉密尔顿回路问题 状态压缩dp
- hdu 1565 方格取数(1) (最小割/状态压缩+DP)
- Light OJ 1406 Assassin`s Creed 状态压缩DP+强连通缩点+最小路径覆盖
- [vijos1456] 最小总代价
- LOJ6009「网络流 24 题 - 10」软件补丁 最小代价转移 SPFA状态压缩
- vijos1426(状态压缩背包dp)
- Vijos 1286 座位安排(状态压缩DP)
- light oj 1073 状态压缩dp+输出字典序最小的解
- vijos - P1286座位安排 (DP状态压缩 + 组合数 + python)
- VIJOS1456最小总代价
- poj1795(状态压缩dp,字符串压缩求最小字典序)
- Light OJ 1406 Assassin`s Creed 状态压缩DP+强连通缩点+最小路径覆盖
- Vijos 1193 扫雷(状态压缩DP)
- vijos1456 最小总代价
- 【bzoj1087】互不侵犯King 状态压缩dp
- ZOJ 4257 (状态压缩dp)
- HDOJ4336Card Collector【概率dp求期望+状态压缩】
- 文章标题 POJ 2411 : Mondriaan's Dream (状态压缩DP)