time limit: 10 sec memory limit: 162 mb
submit: 1499 solved: 872
[submit][status]
在n×n的棋盤裡面放k個國王,使他們互不攻擊,共有多少種擺放方案。國王能攻擊到它上下左右,以及左上左下右上右下八個方向上附近的各乙個格仔,共8個格仔。
只有一行,包含兩個數n,k ( 1 <=n <=9, 0 <= k <= n * n)
方案數。
3 216
題解:終於a了這道題。。。
其實意識到對安放的國王總個數有限制,那就應該是dp了
又因為是在棋盤上,所以以每行為狀態進行轉移
又因為n很小,所以狀壓dp。。。
主要是做一些預處理
**:
1view codevartot,n,i,j1,j2,j,k,l:longint;
2s:ansistring;
3ans:int64;
4 a:array[0..1000,0..1000] of
boolean;
5 f:array[0..10,0..1000,0..100] of
longint;
6 can:array[0..1000] of
boolean;
7 calc:array[0..1000] of
longint;
8function
check(x,y:longint):boolean;
9var
s1,s2:ansistring;
10i:longint;
11begin
12 s1:=binstr(x,n);
13 s2:=binstr(y,n);
14for i:=1
to n do
15if (s1[i]='
1') and ((s2[i-1]='
1') or (s2[i]='
1') or (s2[i+1]='
1')) then
exit(false);
16exit(true);
17end;18
function
cann(x:longint):boolean;
19var
s:ansistring;
20i:longint;
21begin
22 s:=binstr(x,n);
23for i:=2
to n do
if (s[i]='
1') and (s[i]=s[i-1]) then
exit(false);
24exit(true);
25end;26
27procedure
init;
28begin
29readln(n,k);
30 tot:=1
<1;31
for i:=0
to tot do
32begin
33 calc[i]:=0
;34 s:=binstr(i,n);
35for j:=1
to n do
if s[j]='1'
then
inc(calc[i]);
36end
;37 fillchar(f,sizeof(f),0
);38
for i:=0
to tot do f[1,i,calc[i]]:=1;39
for i:=0
to tot do
40if cann(i) then can[i]:=true;
41for i:=0
to tot do
42if can[i] then
43for j:=0
to tot do
44if can[j] then
45if check(i,j) then a[i,j]:=true;
46 //for i:=1
to tot do writeln(can[i],'
',calc[i]);
47end;48
procedure
main;
49begin
50for i:=2
to n do
51for j1:=0
to tot do
52if can[j1] then
53for l:=calc[j1] to k do
54for j2:=0
to tot do
55if (can[j2]) and (a[j1,j2]) then
56 inc(f[i,j1,l],f[i-1,j2,l-calc[j1]]);
57 // for i:=1
to n do
58 // for j:=0
to tot do
59 // for l:=1
to n do
writeln(f[i,j,l]);
60 ans:=0;61
for i:=0
to tot do
if can[i] then
inc(ans,f[n,i,k]);
62writeln(ans);
63end;64
begin
65 assign(input,'
input.txt
');assign(output,'
output.txt');
66reset(input);rewrite(output);
67init;
68main;
69close(input);close(output);
70end.
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的題是乙個套路 具體實現也基本一樣 就是記錄的狀態...