泪目,调了一下午的状压,强推,思维很纯粹
- [P2704 [NOI2001] 炮兵阵地](https://www.luogu.com.cn/problem/P2704)
希望你不认识她≥ω≤
题目大意:给一个n*m的图,然后其中有两种地形(H,P),平原地形(P)可以放置棋子,不同棋子之间存在制约关系,如下图
黑色的地形不可以放置,问最多可以放置多少个棋子。
分析地形:二维数组,0表示P,1表示H。
说说思路:因为每个位置存在两种情况(放置棋子/不放棋子),所以每种放置情况可以转化成一个二进制数,且m<10,最多存在(1<10)种状态。考虑限制条件后如下
int ghs(int h){//二进制数找有几个1
int ss=0;
while(h!=0){
if(h&1)ss++;//位运算最后一位
h=h>>1;//除以2
}
return ss;//返回当前状态的权重
}
for(int i=1;i<(1<