SCOI2005 互不侵犯

2022-08-03 02:15:12 字數 1025 閱讀 4214

這是一道狀壓dp的入門練習題

我們可以預處理出每一行國王的合法擺放方案,然後進行dp。

我們定義f[i][j][k]表示前i行,第i行的狀態為j且使用了k個國王的合法方案數,那麼存在

f[i][j][k]=∑f[i-1][j'][k'],其中j&j'=0,j&j'<<1=0,j&j'>>1=0

注意一點,本題沒有規定k個國王必須放滿n行,所以在任何情況下都可以結束dp。

1 #include 2 #include 3 #include 4 #include 5

using

namespace

std;

6 typedef long

long

ll;7

intn,k;

8long

long f[10][1

<<10][90

],ans;

9 inline int

read()

14while(c<='

9'&&c>='

0') ret=ret*10+c-'

0',c=getchar();

15return ret*op;16}

17int a[2010],sum[2010

],num;

18 inline int lowbit(int

i) 21

intmain() 31}

32for(int i=1;i<=num;i++)

33if(sum[i]<=k) f[1][a[i]][sum[i]]=1;34

for(int i=2;i<=n;i++) 44}

45for(int i=1;i<=n;i++)

46for(int j=1;j<=num;j++)

47 ans+=f[i][a[j]][k];

48 printf("

%lld\n

",ans);

49return0;

50 }

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