状态压缩dp
诺诺罗亚
固执!!!!!!!!!
展开
-
POJ 2411Mondriaan's Dream
蛮水的状态压缩 #include #include long long dp[15][(1<<12)+10]; int mark[(1<<12)+10]; int tot; int fun(int w) { int k=0; while(w>0) { if((w&1)==1) { k++; } else { if((k&1)==1) return 0;原创 2015-01-26 19:58:11 · 446 阅读 · 0 评论 -
HDU 3861 Prison Breake 状态压缩dp+BFS+二分答案
题意:机器人有一个初始能量x,每走到G点时可选择充满能量(初始能量是满的),每走一步消耗一点能量,问当x最小为多少时,可以把所有的Y都走一遍,输出最小的x! 注意:G点和Y点加一起最多15个 附ac代码 #include #include #include #include using namespace std; char map[16][16]; int dp[1<<16][16原创 2015-01-28 16:35:38 · 573 阅读 · 0 评论 -
HDU 4628 状态压缩
//又被题虐了MD #include #include char ch[18]; int dis[(1 int min(int a,int b) { if(a return b; } int main() { int i,j,n,m; while(scanf("%d",&n)!=EOF) { scanf("%s",ch); int len=strlen(ch);原创 2015-01-29 15:56:38 · 576 阅读 · 0 评论 -
poj 3254 Corn Fields
题意:给一个n*m的地图,地图只有1和0组成,0代表不可以放牧,1代表可以放牧;不能有相邻的牛,问有多少种放牧方法。 经典状态压缩 用数组map作为地图用2进制来表示0代表不可以放牧,1代表可以放牧;通过x&x 通过x&y来判断在上一行满足题意的情况在当前行能否满足题意。个人认为状态压缩DP 刚开始蛮不好学的,但是愈战愈勇才是一个ACMer该有的品质!原创 2015-01-20 16:19:57 · 496 阅读 · 0 评论 -
POJ 1185 炮兵阵地 经典状态压缩DP
先说下我个人的理解啊! 因为炮的攻击范围是上下左右两个格子 所以dp数组里面要保证存有第i行的状态和第i-1行的状态,一个三维数组搞定,同样判断的时候也要判断两行!其他的跟poj3254没什么区别! Description 司令部的将军们打算在N*M的网格地图上部署他们的炮兵部队。一个N*M的地图由N行M列组成,地图的每一格可能是山地(用"H" 表示),也可能是平原(用"P"表示)原创 2015-01-21 14:51:46 · 458 阅读 · 2 评论 -
POJ 3311 Hie with the Pie 状态压缩DP
题意:求从0点走到所有点又走回来的最短距离 该题又很多做法,我用的是弗洛伊德+状态压缩 先遍历所有点,求出两点间最短的距离,而后用状态压缩表示该点是否走过,(1 附AC代码 #include #include int map[12][12]; int dp[(1<<12)+1][12]; int min1(int a,int b) { if(a<b) return a; return原创 2015-01-22 10:38:26 · 540 阅读 · 0 评论 -
HDU 3001 Travelling 状态压缩dp+3进制
题意:一个人要旅行,他要去n个地方,且这n个地方每个地方最多可以走2次; 给m条路径,寻问最短花费 很明显的状态压缩,但是要求每个点最多只能走两次,就没办法标记当前点走过或是没走过,只能用三进制来表示 1代表地点1被走过一次、 2代表地点1被走过两次、 3(即10)代表地点2被走过一次、 4(即11)代表地点1被走过一次,地点2被走过一次、 5(即12)代表地点1被走过两次,地原创 2015-01-22 18:42:43 · 618 阅读 · 0 评论