状压
luckyone2014
想思路是苦涩艰辛的,但是打代码是愉快的。
展开
-
hdu 3182 Hamburger Magi 状压
Hamburger Magi Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) Total Submission(s): 241 Accepted Submission(s): 83 Problem Description In the mysteri原创 2014-11-08 09:47:39 · 852 阅读 · 0 评论 -
poj 3311 Hie with the Pie dp+状压
题意 从0出发送汉堡,送完每个点后回到0点 矩阵 表示各个点间距离。 思路 因为可以各个点多次经过,所以先求下floyd 来更新点点之间最短距离。 把每一步,到各个点的状态和最后一步所在的位置还有所花的距离保存下来。 把最后到的各个地方,再加个回零点的距离。求个最小值。 dp[15][15] 一维表示已经走的步数,二维表示当前最后一步到的点。 map的x表示状态,y表示已经花费的时间。原创 2014-11-08 09:55:33 · 914 阅读 · 0 评论 -
hdu 1429 胜利大逃亡(续) bfs+状态压缩
Ignatius再次被魔王抓走了(搞不懂他咋这么讨魔王喜欢)…… 这次魔王汲取了上次的教训,把Ignatius关在一个n*m的地牢里,并在地牢的某些地方安装了带锁的门,钥匙藏在地牢另外的某些地方。刚开始Ignatius被关在(sx,sy)的位置,离开地牢的门在(ex,ey)的位置。 做法:因为钥匙最多有10把,2^10 =1024,所以可以把10把钥匙有没有的情况记录在 一个数中。 num的第三维就是 钥匙 拥有的状态。然后就和普通的bfs一样了。原创 2015-03-05 20:55:55 · 760 阅读 · 0 评论 -
URAL 1500. Pass Licenses 枚举+位运算
题意:有n个点,k种交通卡,m条路。 每条路有对应的交通卡,对应的交通卡可能有多张,拥有一张就可以通行。问从0到1,所需要的交通卡最少几张,并输出是哪几张。 做法:因为数据很小,所以可以枚举交通卡,复杂度是2^k=10^6。然后dfs,每个点只走一次,所以复杂度是n。所以总的复杂度是10^7。跑得有点久用了1.7s。原创 2015-03-29 12:00:56 · 736 阅读 · 0 评论 -
hdu 4856 Tunnels dp+bfs+状压
题意:给你一个n*n地图,再给你m个有向通道,每个通道走的时间为0,走格子的时间为1,问最短多少时间走完所有通道,所有通道要求走 有且仅有一次 。 做法: dis[i][j] 代表i的通道出口到j的通道入口要走多少步。 dp[i][j],i是二进制代表每个通道走过没有,j代表最后一个走的通道。dp值为完成这个状态最少的步数。 dp[i|(1<<k)][k]=min(dp[i|(1<<k)][k],dp[i][j]+dis[j][k]);这个是转移公式,从j通道的出口到k通道的入口 然后更新一遍,把i==原创 2015-05-09 22:38:01 · 596 阅读 · 0 评论 -
hdu 1565 方格取数(1) 状压DP
给你一个n*n的格子的棋盘,每个格子里面有一个非负数。 从中取出若干个数,使得任意的两个数所在的格子没有公共边,就是说所取的数所在的2个格子不能相邻,并且取出的数的和最大。 两个11不相零的二十位 二进制一共有17000个,这题数据比较水,循环两次 居然没超时。 做法:dp[cur][j],cur滚动数组,j表示第j个 符合要求的 二进制数。dp[cur][j]为当前行,j状态 和的最大值。然后不断加,然后上下行不排除的转移下来就可以了。原创 2015-04-30 23:30:06 · 712 阅读 · 0 评论 -
hdu 5094 Maze bfs+状态压缩
题意:n*m大的迷宫 ,有p种钥匙。钥匙最多有10种,所以可以用状压表示门需要钥匙的状态, 还有已经拥有哪几把钥匙的状态。 然后下来一个k,然后k行表示 (x1,y1),(x2,y2)直接有门或者墙。 如果g==0 ,就是有墙, 如果g>0 表示有门,且门需要第g把钥匙才能开。 然后下来一个s,然后s行,表示(x,y)这个点有 第g把钥匙。 问从(1,1)到(n,m)最少几步。 做法:状压, 每个点有四个方向,记录能否通过的状态, 门的话 标记为-1, 0,表示不用钥匙,>0 的话,哪位上是1,原创 2015-05-05 22:17:41 · 738 阅读 · 0 评论