状态压缩
诺诺罗亚
固执!!!!!!!!!
展开
-
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 · 457 阅读 · 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 · 585 阅读 · 0 评论 -
HDU 3006
#include #include int mark[1<<16]; int main() { int i,j,n,m,k,t,tot; while(scanf("%d%d",&n,&m)!=EOF) { memset(mark,0,sizeof(mark)); for(i=1;i<=n;i++) { scanf("%d",&t); tot=0; for(j=1原创 2015-01-29 18:36:53 · 570 阅读 · 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 · 505 阅读 · 0 评论 -
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 · 552 阅读 · 0 评论 -
zoj 3471状态压缩DP
#include #include int max(int a,int b) { if(a>b) return a; return b; } int dp[100000],map[15][15],mark[15]; int main() { int i,j,n,m,k; while(scanf("%d",&n)!=EOF&&n) { for(i=1;i<=n;i++) for原创 2015-01-23 21:36:19 · 543 阅读 · 0 评论 -
POJ 1185 炮兵阵地 经典状态压缩DP
先说下我个人的理解啊! 因为炮的攻击范围是上下左右两个格子 所以dp数组里面要保证存有第i行的状态和第i-1行的状态,一个三维数组搞定,同样判断的时候也要判断两行!其他的跟poj3254没什么区别! Description 司令部的将军们打算在N*M的网格地图上部署他们的炮兵部队。一个N*M的地图由N行M列组成,地图的每一格可能是山地(用"H" 表示),也可能是平原(用"P"表示)原创 2015-01-21 14:51:46 · 469 阅读 · 2 评论 -
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 · 630 阅读 · 0 评论