
状压dp
文章平均质量分 76
谢符宝
业精于勤,荒于嬉行成于思,毁于随。
展开
-
poj2923 状压记忆化搜索
题意:n个货物,第i个重量为Wi,有两只船,载重分别为C1,C2。问至少需要两艘船运几趟才能将n个货物运完。解法:由于n小于等于10,可以联想到状态压缩。求出两艘船一次可以运送的状态(将两个船分别一次可以运送的状态取 ‘或’ 就可以了)。然后就是常规的记忆化搜索。代码:#include #include #include using namespace std;int wo原创 2014-01-23 23:11:20 · 723 阅读 · 0 评论 -
poj2411(状态转移,dfs搜索转移)
题目链接题意:用1*2的小矩形拼成n*m(n,m解法:状态压缩,dfs求转移。当前一列的状态确定后,后一列必须用横向的矩形来填补前一列的空白格,所以前一列不为空时,这一列可以选择也为空让下一列来填补,或是本列来个纵向的矩形填补(如果有连续的两个空格的话)。代码:/**********************************************原创 2014-12-04 17:10:03 · 882 阅读 · 0 评论 -
hdu5117(数学推导+dp)
题意:有n(n解法:假设一种情况是开灯数是X, X=(x1+x2+x3...xn),xi是第i个灯的开闭情况。则X^3=(x1+x2+x3...xn)*(x1+x2+x3...xn)*(x1+x2+x3...xn)。即求三个灯的三三组合Xi*Xj*Xk,只有Xi,Xj,Xk都为1时候,他们的乘积才是1. dp[i][j][k][state]表示三个灯ijk状态为stat原创 2014-12-01 11:34:09 · 1134 阅读 · 1 评论 -
hdu4336(状压dp求期望)
题意:每个零食包中装有第i号卡片的概率是pi,每个包最多一个卡片问获得所有卡片种类的期望零食包数;解法:状压dp,ans[i]表示剩余集合i时的期望。转移时枚举下一个取的种类。这个记忆化搜索超时,改成迭代才过,原因还不是很清楚。代码:/******************************************************* author:xiefub原创 2014-06-07 23:09:58 · 994 阅读 · 0 评论 -
poj2288(Islands and Bridges) 状压DP
题目链接:http://poj.org/problem?id=2288题意:每个点有一个权值Vi,找一条哈密顿路径,路径的权值来自三条:1 路径上的Vi之和 2 所有相邻点对ij的Vi*Vj之和 3 相邻连续三点i,j,k(并且三点要构成三角形)Vi*Vj*Vk之和。解法:dp[st][i][j]表示从j走到i并且剩下集合st没有走的最大权值。关于路径书,在转移的时候顺便计算即可;原创 2014-06-27 17:24:17 · 746 阅读 · 0 评论 -
poj3311(Hie with the Pie)状压dp
题目链接:http://poj.org/problem?id=3311解法:标准的状压dp类型,先floyd获得两两之间最短距离。然后dp[i][j]表示剩下集合i没走,已经走到j的最短距离;代码:/******************************************************* @author:xiefubao******************原创 2014-06-26 23:03:01 · 801 阅读 · 0 评论 -
poj2411(状压dp)
题意:由1*2的纸片组成一个n*m的矩阵(n解法:状压dp,ans[i][j]表示第i行状态为j(状态j表示为1的位向下扩展)有多少种组法。除了第一行和最后一行,都可能会有来自上方或是伸向下放的格子,剩余的格子必须可以由1*2横着铺在本行,legal函数用于判断状态是否合法;最后答案就是最后一行没有伸向下方的组法数量ans[n-1][0].代码:/*************原创 2014-04-09 23:15:12 · 1113 阅读 · 0 评论 -
lightoj1061 (N Queen Again)搜索+状压dp
题意:(八皇后问题的变形)给定8个皇后的位置,然后问最少要走几步使得每个皇后之间可以不相互攻击(不在同一行同一列同一斜线)。其中走的过程每步可以横着竖着斜着走多个格子。解法:先枚举所有合法的八皇后局面(总共92种)。然后将给的点对合法八皇后局面进行匹配。dp[i][j]表示合法八皇后前i个点用掉给定八皇后集合的子集j所花费的最小步数。这里的匹配相当于两个集合各八个点,进行一一配对。原来原创 2014-05-08 09:41:24 · 1315 阅读 · 0 评论 -
poj3229(图论+状压dp)
题意:n个城市,一些城市之间有铁路或者公交双向相连。一个人要从0号城市出发,游览其中的m个城市,游览第i个城市需要cost[i]的时间,问此人是否能在特定的时间内游览完这m个城市并返回0市,如果可以输出可以最多游览的城市数量(m个城市包括在里面),否则输出"No Solution"。解法:状压dp,首先floyd求出两两城市之间的最短路径。 dp[state][原创 2014-04-22 12:25:57 · 1079 阅读 · 0 评论 -
poj3279(局部枚举定全局)
题意:黑白的板,每次选择一个十字形翻转(十字板内黑白互换,若是边界则不管),求最小翻转次数将原图变为全白的策略(有多个最小次数的话,输出字典序最小的)。解法:枚举第一行(1代码:/***************************************************** author:xiefubao***************************原创 2014-03-16 11:32:07 · 691 阅读 · 0 评论 -
CF401D(Roman and Numbers)状压DP
题意:给一个数n和m(n (1 ≤ n 18) m (1 ≤ m ≤ 100).)问n的各位数字重新组合(非0开头)有多少种不同的数能被m整除。当时想到了正解,但是没仔细算long long ans[1 long long ans[1还是回忆下正解吧:ans[j][k]的j转化为二进制表示n的每个位置是否被用到,k是指模m等于k的数量。转移也是暴力转的,最坏复杂度是:(1给原创 2014-03-11 18:05:53 · 924 阅读 · 0 评论 -
poj(1185)状压DP
题意:经典的好题。司令部的将军们打算在N*M的网格地图上部署他们的炮兵部队。一个N*M的地图由N行M列组成,地图的每一格可能是山地(用"H" 表示),也可能是平原(用"P"表示),如下图。在每一格平原地形上最多可以布置一支炮兵部队(山地上不能够部署炮兵部队);一支炮兵部队在地图上的攻击范围如图中黑色区域所示: 如果在地图中的灰色所标识的平原上部署一支炮兵部队,则图中的黑色的网格表示原创 2014-02-27 21:22:32 · 623 阅读 · 0 评论 -
hihocoder1170(状压dp)
题意:小冰的N个机器人兄弟排成一列,每个机器人有一个颜色。现在小冰想让同一颜色的机器人聚在一起,即任意两个同颜色的机器人之间没有其他颜色的的机器人。假设任意相邻的两个机器人可以交换位置,最少需要多少次交换?N解法:一个明显的结论是:交换机器人时,相同颜色的机器人不会发生交换(保持他们之间的相对顺序)。即相当于给16种排序颜色。这总共有16!种结果,其dp方法雷同于旅行商问题的方法。原创 2015-05-17 15:39:45 · 904 阅读 · 0 评论