------状态压缩DP
fisty
hi
展开
-
lightoj 1011
/******************* * lightoj 1011 * Author: fisty * Data:2014-10-6 * 状态压缩DP ********************/ #include #include #include using namespace std; #define MAX_N 20 int dp[MAX_N][1<<16]; int a原创 2014-10-07 22:28:20 · 635 阅读 · 0 评论 -
Poj 2836 Rectangular Covering(状压DP)
题意: 给你n个顶点,用任意个边垂直于x轴和y轴的矩形进行覆盖,最小覆盖面积是多少,都为整数. 思路: 先预处理处两两点的面积,和这个面积包围的点。 之后进行这样的定义 dp[S] := 当前点集为S时的最小面积 若将要选取的两个点点集为coverd, 面积为area dp[S | ( 1 制约:原创 2015-08-06 18:50:04 · 876 阅读 · 0 评论 -
POJ 2686 Traveling by Stagecoach(状压DP)
思路: 设dp[S][v] := 到达剩下的车票集合为S, 并且现在在城市v的状态所需要的最小花费 从这个状态出发,使用一张车票i∈S便可以移动到一个相邻的顶点u,费用加上d[v][u] / t[i]; 使用过车票i之后的S变为 S & ~( 1 故dp[S & ~ (1 限制: 1 2 1 1 1 /*******************************原创 2015-08-06 19:03:49 · 587 阅读 · 0 评论 -
light oj 1057 Collecting Gold(状态压缩dp)
思路:假设黄金数量一共有k个,给这些黄金编号为0 ~ k-1并且把他们的位置都存起来。起点编号为k 那么定义dp[s][i] : 当前已经采集的黄金集合为s, 并且现在处于编号为k的位置 对于将要采集的黄金编号 j ,有如下转移方程 d[s | (1 初始点为dp[0][k] = 0; 终点也为dp[0][k],是经典的TSP问题. /**********************原创 2015-08-25 09:34:51 · 1266 阅读 · 0 评论 -
lightoj 1021 Painful Bases (状压dp)
Time Limit: 2 second(s) Memory Limit: 32 MB As you know that sometimes base conversion is a painful task. But still there are interesting facts in bases. For convenience let's a原创 2015-07-12 22:55:25 · 650 阅读 · 0 评论 -
hiho一下第八周(状态压缩)
时间限制:10000ms 单点时限:1000ms 内存限制:256MB 描述 小Hi和小Ho在兑换到了喜欢的奖品之后,便继续起了他们的美国之行,思来想去,他们决定乘坐火车前往下一座城市——那座城市即将举行美食节! 但是不幸的是,小Hi和小Ho并没有能够买到很好的火车票——他们只能够乘坐最为破旧的火车进行他们的旅程。 不仅如此,因为美食节的吸引,许多人纷纷踏上了和小H原创 2015-06-08 23:13:25 · 532 阅读 · 0 评论 -
lightoj 1018 brush(四)(状压DP)
1018 - Brush (IV) PDF (English) Statistics Forum Time Limit: 2 second(s) Memory Limit: 32 MB Mubashwir returned home from the contest and got angry aft原创 2015-06-28 17:36:23 · 514 阅读 · 0 评论 -
poj 2441 Arrange the Bulls(状压DP)
我们把畜棚有没有被公牛选的状态用一个01串来表示,0101就表示1,3号畜棚被公牛占用,其余是空的。因为一个畜棚只能被一个公牛占用,所以在转移状态时需要加上畜棚的状态。 定义dp[i][s] : 前i头牛已经选择完畜棚,当前畜棚的状态为s的选择方案数目; dp[i][s] += dp[i-1][s - {第 i 头牛选择的畜棚 j | (j 不属于s)} ] 利用01背包化二维数原创 2015-06-24 20:00:07 · 604 阅读 · 0 评论 -
uva 10817 - Headmaster's Headache ( 状态压缩dp)
题目大意 某校有n个教师和m个求职者,已知每人的工资和能教的课程集合,要求支付最少的工资使得每门课都至少有两名教师教学。在职教师必须招聘。 思路 d[s1][s2]: s1表示课程集合{ s1 }都至少有一个教师教的情况。 s2表示课程集合{ s2 }都至少有两个教师教的情况。 那么d[s1][s2] = min(d[s1][s2],原创 2015-03-05 16:20:26 · 531 阅读 · 0 评论 -
uva 11825 - Hackers' Crackdown dp
/******************* * Author:fisty * Data:2014-10-27 * uva11825 * 状压DP ******************/ #include #include #include using namespace std; #define MAX_N 1<<16 int p[MAX_N]; int main(){原创 2014-10-28 22:38:19 · 455 阅读 · 0 评论 -
lightoj 1037 - Agent 47 (状压DP)
题意:你现在需要消灭n个敌人,n个敌人的血量已知,你的普通攻击力为1,但是如果你杀死敌人i可以用它的武器去杀死其他敌人,p[i][j] 表示用敌人i的武器射杀敌人j会减p[i][j]滴血.问你最少可以攻击多少次可以将敌人杀死。 思路: 定义集合s为死亡敌人的集合。 dp[s] 为让集合为s的人死亡最小需要的攻击次数。 如果现在想要消灭敌人i 并且敌人i不属于s 那么dp[s | (1原创 2015-08-20 15:36:21 · 791 阅读 · 0 评论