hdu 5418(状态压缩dp+Floyd)
点击打开链接
解题思路:这道题目和TSP问题很相似,唯一不同的是同一个点可以重复走几次。。。。
这道题目只有16个顶点,所以很容易想到状态压缩dp,dp[i][j]表示到达顶点i时的状态为j的最小花费,那么状态方程也很容易推理出来dp[i][j] = min(dp[k][j-1<<i]+map[i][k]);这里注意,由于每一个点可以到达多次,所以这里的map要先用Floyd算法来处理,否则就会出现用还未更新的状态去更新当前的状态,这样很明显两个状态都无法保证是最优的,第一次WA就是卡在这里,后面看了别人的解题报告,才明白了Floyd算法在这里的重要性。。。
AC:
#include<iostream>
#include<cstdio>
#include<cstring>
using namespace std;const int inf = 0x3f3f3f3f;
int n,m;
int dp[20][1<<17],map[20][20];int main()
{ int t;scanf("%d",&t);while(t--){int w,u,v,bit;scanf("%d%d",&n,&m);memset(map,inf,sizeof(map));memset(dp,inf,sizeof(dp));for(int i = 1; i <= m; i++){scanf("%d%d%d",&u,&v,&w);map[u][v] = min(map[u][v],w);map[v][u] = map[u][v];}for(int k = 1; k <= n; k++)for(int i = 1; i <= n; i++)for(int j = 1; j <= n; j++)map[i][j] = min(map[i][j],map[i][k] + map[k][j]);bit = 1<<n;dp[1][1] = 0;for(int j = 1; j < bit; j++)for(int k = 1; k <= n; k++)for(int i = 1; i <= n; i++){if(map[i][k] == inf) continue;int tmp = 1 << (i-1);if(j & tmp){if(dp[k][j] != inf){dp[i][j] = min(dp[i][j],dp[k][j] + map[i][k]);}if(dp[k][j-tmp] != inf){dp[i][j] = min(dp[i][j],dp[k][j-tmp] + map[i][k]);}}}printf("%d\n",dp[1][bit-1]);}return 0;
}
hdu 5418(状态压缩dp+Floyd)相关推荐
- hdu 5067(状态压缩dp)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=5067 解题思路:这道题开始想复杂了,想用bfs去求出最短距离,其实没必要,因为题目中没有阻碍关系,所以 ...
- hdu 5713(状态压缩DP)
要进行两次dp, 第一个,dp[i],1<=i<=(1<<n) 其中用i的二进制形式表示已选择的点. dp[i] 用来保存i中的点构成一个连通块,边集多少种可能. 转移方程: ...
- Victor and World(spfa+状态压缩dp)
题目连接:http://acm.hdu.edu.cn/showproblem.php?pid=5418 Victor and World Time Limit: 4000/2000 MS (Java/ ...
- 0x56. 动态规划 - 状态压缩DP(习题详解 × 7)
目录 Problem A. 最短Hamilton路径 ProblemB. 蒙德里安的梦想 Problem C. Corn Fields Problem D. 小国王 Problem E. 炮兵阵地 P ...
- Light OJ 1316 A Wedding Party 最短路+状态压缩DP
题目来源:Light OJ 1316 1316 - A Wedding Party 题意:和HDU 4284 差点儿相同 有一些商店 从起点到终点在走过尽量多商店的情况下求最短路 思路:首先预处理每两 ...
- 状态压缩dp学习小记part2
继续学习状态压缩的相关知识. 本来准备继续按照上篇博文里提到的那篇论文继续学习,但被矩形完全覆盖虐了回来,决定先做些其他的题增进理解之后再回来做. Zoj 3471 Most Powerful 题目链 ...
- POJ 2411 Mondriaan‘s Dream(最清楚好懂的状压DP讲解)(连通性状态压缩DP)
poj 2411 Mondriaan's Dream(最清晰的状压DP解析) 闫氏DP大法好 我们这里是一列一列地来,因为是一个棋盘性的状态压缩DP,从哪个方向都一样 摆放的小方格总方案数 等价于 横 ...
- BZOJ1688|二进制枚举子集| 状态压缩DP
Disease Manangement 疾病管理 Description Alas! A set of D (1 <= D <= 15) diseases (numbered 1..D) ...
- hdu1074 状态压缩dp+记录方案
题意: 给你一些作业,每个作业有自己的结束时间和花费时间,如果超过结束时间完成,一天扣一分,问你把n个作业完成最少的扣分,要求输出方案. 思路: 状态压缩dp,记录方案数的地方 ...
最新文章
- aspen串联反应怎么输入_【精】反应器(反应釜)的结构和工作原理
- jq onclick 定义_从HTML中的onClick属性调用jQuery方法
- find文件,tar打包和打包压缩
- 选项卡,下拉菜单操做时的页面数据更新,highcharts,d3 结合。
- pytorch错误解决 | 错误‘Widget Javascript not detected. It may not be installed or enabled properly.‘
- xml,String互转
- 深入浅出Docker(二):Docker命令行探秘
- jQuery Mobile中滑动块range的data-*选项
- (String)、toString()、String.valueOf区别
- 美通企业日报 | 阿迪发布星战系列球鞋;安进27亿美元收购百济神州20.5%股份
- 荣耀路由器w831刷linux,华为荣耀路由器登录入口:荣耀路由器WS831设置指南【图解】...
- 千万数据的分库分表方案
- 【情感分析:挖掘观点、情感和情绪】读书笔记-02
- HTTPS证书基本概述
- c盘是不是越大越好_Windows系统磁盘分区,C盘划分多大最合适?不是越大越好!...
- 还原android系统文件夹,如何从Android的内存中恢复文件-万兴恢复专家
- 那一场呼啸而过的青春
- 使用AndroidStudio进行NDK开发
- Python版简易银行管理系统源代码,银行管理系统python代码、银行自助提款系统
- c#浅谈反射内存的处理