HDU 4539 郑厂长系列故事――排兵布阵
/*
曼哈顿距离的定义是:两个点的坐标为(x1,y1),(x2,y2),两点的曼哈顿距离为|x1-x2|+|y1-y2|
题意:题上要求是两个士兵的距离不能是曼哈顿距离为2,意思就是这个点在同一行同一列不能相间,这个点的左上,左下,右上,右下角不能有
士兵.
思路:dp+状态压缩dp[i][j][k]定义的状态为i是当前行,j为当前行的状态,k为上一行的状态类似炮兵阵地
*/
#include
#include
#define Max(a,b) a>b?a:b
int dp[105][170][170],s[180],sn[180],len;
int Count(int m)
{int C=0;while(m>0){if(m&1)C++;m=m>>1;}return C;
}
int check(int m)
{if(m&(m<<2))return 0;return 1;
}
void Inint(int m)
{len=0;for(int i=0;i<(1<>1))==0)//不能只是左移或者右移,这样可能为超范围造成误判,比如1右移的话变成0就可能会造成误判return 1;return 0;
}
int main()
{int n,m,Map[105];while(scanf("%d%d",&n,&m)!=EOF){if(n==0||m==0){printf("0\n");continue;}memset(dp,0,sizeof(dp));memset(Map,0,sizeof(Map));for(int i=0;i
本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!
