SCOI2005互不侵犯King

2022-05-12 12:23:51 字數 2969 閱讀 6161

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。。。

主要是做一些預處理

**:

1

vartot,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.

view code

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的題是乙個套路 具體實現也基本一樣 就是記錄的狀態...