状态压缩
文章平均质量分 80
iHge2k
专注数据结构和算法
展开
-
hdu 4114(状压dp)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4114 思路:首先是floyd预处理出任意两点之间的最短距离。dp[state1][state2][u]表示在该状态state1(已经访问过的景点)、state2(手中有的景点的票)、目前所在的位置时所花费的时间的最小值,于是答案就是dp[(1 1 #include 2 #includ原创 2014-05-26 18:09:04 · 429 阅读 · 0 评论 -
hdu 3001(状压dp, 3进制)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=3001 由于本题中一个点最多能够访问2次,由此可以联想到3进制; visited[i][j]表示在状态i下在点j已经做过的次数,dp[i][j]表示在状态i下到达点j走过的最小的路程,于是我们可以通过预处理得到visited[i][j]数组,然后就是一般的状态转移。 1 /*******原创 2014-05-26 18:09:56 · 357 阅读 · 0 评论 -
hdu 4281(MTSP)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4281 题意:给出N个点,第一个点是裁判,其他N-1个点需要裁判过去回答问题,每个点需要的时间不一样,而每个裁判最多能回答M分钟的问题。题目分两问,第一问是如何分配可以使使用的裁判数最少,第二问是如何分配裁判,使裁判走过的总路程和最少,裁判一开始都在1,最终也要回到1。 思路:首先我们可以把符合条件原创 2014-05-26 18:08:51 · 839 阅读 · 0 评论 -
loj 1037(状压dp)
题目链接:http://acm.hust.edu.cn/vjudge/problem/viewProblem.action?id=25914 思路:dp[state]表示当前状态下要消耗的最小的shots。 1 #include 2 #include 3 #include 4 #include 5 using namespace std; 6 #define in原创 2014-05-26 18:08:47 · 371 阅读 · 0 评论 -
hdu 1430+hdu 3567(预处理)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1430 思路:由于只是8种颜色,所以标号就无所谓了,对起始状态重新修改标号为 12345678,对目标状态标号做相应的修改,先预处理出12345678到所有状态的路径,记录所有状态的pre值,直接输出即可。 1 #include 2 #include 3 #include原创 2014-05-26 18:07:17 · 484 阅读 · 0 评论 -
hdu 4284(状压dp)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4284 思路:类似于poj3311:http://poj.org/problem?id=3311,首先floyd预处理出两点之间的最短距离,然后就是枚举所有的状态了。 1 #include 2 #include 3 #include 4 #include 5 using n原创 2014-05-26 18:05:29 · 368 阅读 · 0 评论 -
hdu 1885(状态压缩+bfs)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1885 思路:对于钥匙,才4把,直接状态压缩搞一下就好了,然后就是开个三位数组标记状态了,跟普通bfs没什么区别。 1 #include 2 #include 3 #include 4 #include 5 #include 6 using namespace std;原创 2014-05-26 17:59:05 · 277 阅读 · 0 评论 -
hdu 4640(状压dp)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4640 思路:f[i][j]表示一个人状态i下走到j的最小花费,dp[i][j]表示i个人在状态j下的最下花费。首先我们可以一遍bfs求出f[i][j],然后通过f[i][j]得到dp[1][i],最后就是更新dp[i][j]了。 1 #include 2 #include 3 #原创 2014-05-26 18:07:19 · 954 阅读 · 0 评论 -
poj 3311(floyd+状态压缩)
题目链接:http://poj.org/problem?id=3311 思路:Floyd + 状态压缩DP 题意是有N个城市(1~N)和一个PIZZA店(0),要求一条回路,从0出发,又回到0,而且距离最短 (可重复走).首先不难想到用FLOYD先求出任意2点的距离dis[i][j] 。接着枚举所有状态,用11位二进制表示10个城市和pizza店,1表示经过,0表示没有经过 。定义状态DP原创 2014-05-26 18:02:43 · 296 阅读 · 0 评论 -
hdu 4770(枚举 + dfs爆搜)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4770原创 2014-10-05 10:28:08 · 773 阅读 · 0 评论 -
hdu 4568 Hunter(spfa预处理 + 状压dp)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4568 思路:原创 2014-10-06 12:36:46 · 446 阅读 · 0 评论 -
zoj 3471(状态压缩)
题目链接:http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemId=4257 dp[state]表示当前状态为state时的所能获得的最大值,这里我用1表示气球存在,0表示消失,由于状态转移是从有到无,于是最外层循环于是从大到小,这与一般的状态要所略有区别。 方程为:dp[s ^ (1 1 /**************原创 2014-05-26 18:09:58 · 456 阅读 · 0 评论 -
hdu 1514(记忆化+位压缩+dp)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1514 思路:orz...大牛讲的太妙了: 题意是给4堆(堆的高度小于等于40)有颜色(颜色的种类小于等于20)的物品,你有一个篮子最多能装5件物品,每次从这4堆物品里面任取一件物品放进篮子里,但是取每堆物品时,必须先取上面的物品,才能取下面的物品,如果发现篮子里的两种物品的颜色一样,那么把这两种物原创 2014-05-26 17:58:41 · 433 阅读 · 0 评论 -
hdu 4462(状态压缩)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4462 思路:由于数据不大,可以直接将所有的状态表示出来,然后枚举,判断能否将方格全部覆盖。 http://paste.ubuntu.com/5928952/原创 2014-05-26 18:02:52 · 817 阅读 · 0 评论 -
hdu 3001(状压dp)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=3001 思路:这道题类似于TSP问题,只不过题目中说明每个城市至少要走一次,至多走2次,因此要用到三进制压缩,然后就是状态转移方程了:dp[i+State[k]]=min(dp[i+State[k]],dp[i][j]+map[j][k]); 1 #include 2 #include原创 2014-05-26 18:05:27 · 313 阅读 · 0 评论 -
hdu 4628(状态压缩)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4628 思路:首先把所有的回文找出来,如果当前状态为回文,则dp[state]=1,否则dp[state]=inf.然后就是枚举所有的状态:若当前状态为state,枚举子状态(substate=(substate-1)&state),则有dp[state]=min(dp[state],dp[subst原创 2014-05-26 18:02:54 · 387 阅读 · 0 评论 -
loj1011 状态压缩
题目链接:http://lightoj.com/volume_showproblem.php?problem=1011 思路:最近的开始做dp了。。。很明显的一道状态压缩题,dp[n][state]表示前n行状态为state的最大值。 1 #include 2 #include 3 #include 4 #include 5 using namespace s原创 2014-05-26 18:09:29 · 846 阅读 · 0 评论 -
hdu 2809(状压dp)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=2809 思路:简单的状压dp,看代码会更明白。 1 #include 2 #include 3 #include 4 #include 5 using namespace std; 6 7 struct State{ 8 int ati,def,hp,原创 2014-05-26 18:06:24 · 362 阅读 · 0 评论 -
hdu 2686(状压dp)
题目链接:http://poj.org/problem?id=2686 思路:典型的状压dp题,dp[s][v]表示到达剩下的车票集合为S并且现在在城市v的状态所需要的最小的花费。 1 #include 2 #include 3 #include 4 #include 5 using namespace std; 6 #define inf 1<<30 7原创 2014-05-26 18:05:59 · 306 阅读 · 0 评论 -
loj 1406(状态压缩)
题目链接:http://lightoj.com/volume_showproblem.php?problem=1406 思路:首先可以预处理出在每个顶点的状态的合法状态vis[u][state], 然后标记那些合法状态mark[state]。最后就是记忆化搜索了,对于当前状态state,我们有res = min(res, 1 + Solve(state ^ substate)), 其中subst原创 2014-05-26 18:09:44 · 408 阅读 · 0 评论 -
hdu 3681(bfs+二分+状压dp判断)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=3681 思路:机器人从出发点出发要求走过所有的Y,因为点很少,所以就能想到经典的TSP问题。首先bfs预处理出‘Y',’F','G'之间的最短距离,由于G点可以充电,到达G点就把当前能量更新为电池容量然后继续走。因为每个G点只能充一次电,这就好像TSP中的每个点只能走一次一样,然后就是二分答案了,用状原创 2014-05-26 18:05:37 · 493 阅读 · 0 评论 -
poj 1185(状压dp)
题目链接:http://poj.org/problem?id=1185 思路:状态压缩经典题目,dp[i][j][k]表示第i行状态为j,(i-1)行状态为k时最多可以放置的士兵个数,于是我们可以得到递推方程:dp[i][j][k]=max(dp[i][j][k],dp[i-1][k][l]+num[j]);(其中num[j]为该状态下可以放置的士兵的个数。至于具体怎么分析,这位大牛讲的很清楚:原创 2014-05-26 18:05:33 · 302 阅读 · 0 评论 -
hdu 4568(SPFA预处理+TSP)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4568 思路:先用spfa预处理出宝藏与宝藏之间的最短距离,宝藏到边界的最短距离,然后就是经典的求TSP过程了。 1 #include 2 #include 3 #include 4 #include 5 #include 6 using namespace原创 2014-05-26 18:05:25 · 330 阅读 · 0 评论 -
hdu 4539(状压dp)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4539 思路:跟poj1185简直就是如出一辙! 1 #include 2 #include 3 #include 4 #include 5 using namespace std; 6 7 int row[111]; 8 int dp[111][222][2原创 2014-05-26 18:05:35 · 443 阅读 · 0 评论 -
hdu 2489(枚举 + 最小生成树)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=2489 思路:由于N, Mde原创 2014-10-08 19:47:58 · 469 阅读 · 0 评论