在n×n的棋盤裡面放k個國王,使他們互不攻擊,共有多少種擺放方案。國王能攻擊到它上下左右,以及左上左下右上右下八個方向上附近的各乙個格仔,共8個格仔。
——by洛谷
顯然的棋盤模型的狀壓dp,故考慮對每行二進位制狀壓,狀壓為表示有無王的01串,再由題意得到如下的限制:
於是對於限制一,可在預處理中實現;對於二三,可在轉移時限制,得出狀態轉移方程:
f[i][j][l+c[j]]=σf[i-1][k][l];(i:當前行數;j:列舉本行所有可能狀態,l+c[j]:此時的王的個數,c[j]:狀態s[j]中王的個數)
然後對k進行限制,s[j]&s[k]==0,s[j]&(s[k]<<1)==0,s[j]&s[k]>>1)==0;之類的
需要注意的是:
總結:簡單的dp麼
**如下:
#includeusingnamespace
std;
long
long f[10][1000][100
];int s[100],c[100
];int
man;
intn,m;
void dfs(int ,int ,int ,int
);int
main()
void dfs(int now,int num,int ma,int
p)
for(i=0;i<=1;i++)
if(1-p>=i)
dfs(now+1,num+i*(1
<<(now-1)),ma+i,i);
}
祝ac喲;
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的題是乙個套路 具體實現也基本一樣 就是記錄的狀態...