状态压缩dp
诺诺罗亚
固执!!!!!!!!!
展开
-
POJ 2411Mondriaan's Dream
蛮水的状态压缩#include#includelong 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 · 441 阅读 · 0 评论 -
HDU 3861 Prison Breake 状态压缩dp+BFS+二分答案
题意:机器人有一个初始能量x,每走到G点时可选择充满能量(初始能量是满的),每走一步消耗一点能量,问当x最小为多少时,可以把所有的Y都走一遍,输出最小的x!注意:G点和Y点加一起最多15个附ac代码#include#include#include#includeusing namespace std;char map[16][16];int dp[1<<16][16原创 2015-01-28 16:35:38 · 572 阅读 · 0 评论 -
HDU 4628 状态压缩
//又被题虐了MD#include#includechar ch[18];int dis[(1int min(int a,int b){if(areturn 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 · 573 阅读 · 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 · 492 阅读 · 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#includeint 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 · 539 阅读 · 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 · 616 阅读 · 0 评论