在n×n的棋盤裡面放k個國王,使他們互不攻擊,共有多少種擺放方案
國王能攻擊到它上下左右,以及左上左下右上右下八個方向上附近的各乙個格仔,共8個格仔
說實話,之前就一直想寫狀壓的部落格了,奈何一直沒有時間搞
互不侵犯應該是最經典的狀壓題目了
狀壓的本質就是用乙個二進位制串表示當前行的狀態
所以我們列舉二進位制串,判斷它是否合法
bool check(int i)
for(register int i=0;i<=maxn;++i)//列舉每一種狀態
}
接著按行列舉,更新它的狀態
for(register int i=2;i<=n;++i)//列舉每一行
} }}
統計答案
for(register int i=1;i<=maxn;++i)
ans+=dp[n][i][m];
總**:
#include#define ll long long
using namespace std;
int n,m,cnt,can[(1<<13)];
ll ans=0,dp[15][(1<<13)][90];//第i行,狀態的下標為j,k個國王
bool check(int i)
bool check(int x,int y)
int getnum(int sit)
return res;
}templateinline void read(t &res)
int main()
} for(register int i=2;i<=n;++i)//列舉每一行
}} }
for(register int i=1;i<=maxn;++i)
ans+=dp[n][i][m];
printf("%lld\n",ans);
}
SCOI2005 互不侵犯
在n n的棋盤裡面放k個國王,使他們互不攻擊,共有多少種擺放方案。國王能攻擊到它上下左右,以及左上左下右上右下八個方向上附近的各乙個格仔,共8個格仔。只有一行,包含兩個數n,k 1 n 9,0 k n n 方案數3 2 同sgu223 include include include include ...
SCOI2005 互不侵犯
題目描述 在n n的棋盤裡面放k個國王,使他們互不攻擊,共有多少種擺放方案。國王能攻擊到它上下左右,以及左上左下右上右下八個方向上附近的各乙個格仔,共8個格仔。輸入格式 只有一行,包含兩個數n,k 1 n 9,0 k n n 輸出格式 所得的方案數 ly最可愛啦 這題。想了5分鐘,寫了10分鐘,調了...
SCOI2005 互不侵犯
在n n的棋盤裡面放k個國王,使他們互不攻擊,共有多少種擺放方案。國王能攻擊到它上下左右,以及左上左下右上右下八個方向上附近的各乙個格仔,共8個格仔。兩個數n,k 1 n 9,0 k n n 方案數。3 2果然啊 狀壓題都是乙個套路 和前面那個noi的題是乙個套路 具體實現也基本一樣 就是記錄的狀態...