nefuoj1606
qwq和棋局挑戰題解
在乙個n∗n
n* n
n∗n大小的棋盤上放置k
kk個棋子,要求放置後的棋盤上每一行和每一列最多有乙個棋子,求方案數,其中0
<
n<9,
0<
k<=n
00<
n<9,
0<
k<=n
。1.和八皇后問題不同,去掉了每條對角線上最多有乙個棋子的限制.
2.(法i)考慮dfs.
dfs(y,cnt)表示當前考慮第y行,放置了cnt枚棋子
對於每一種狀態,可以選擇在第y行放置棋子,也可以選擇不放.
void
dfs(
int y,
int cnt)
if(y==n+1)
return
;for
(int i=
1;i<=n;i++)}
dfs(y+
1,cnt)
;}
3.(法ii)排列組合
先考慮k嚴格小於n的情況.若逐行考慮,棋盤中一定含有n−k
n-kn−
k個空行.
先把k枚棋子放進k行n列的棋盤,n1=
n∗(n
−1)∗
...(
n−k+
1)=a
nk
n1=n*(n-1)*...(n-k+1)=a_n^k
n1=n∗(
n−1)
∗...
(n−k
+1)=
ank
,(此處亦可以用深搜實現)
再把k行棋盤放進n行棋盤中,n2=
cn
kn2=c_n^k
n2=cnk
.由分步乘法計數原理,ans
=n1∗
n2
ans=n1*n2
ans=n1
∗n2.
特別地,當n=k
n=kn=
k時,ans
=n
!ans=n!
ans=n!
,亦符合上式.
神奇線段樹QWQ
線段樹基於分治的思想會分治的思想,用於區間求值問題。比如說 求區間的最大值,最小值等等 給出乙個長隊為8的區間對他進行操作。先將他分成若干區間 如圖藍色為區間標號,紅色為區間 直到分成單個點並把所需要的資訊存到單點上。建樹 void build tree int k,int l,int r 如果l ...
splay 學習總結 QwQ
省選之前就大概搞了下 splay 然後因為時間不太夠就沒寫總結了,然後太久沒用之後現在一回想感覺跟沒學過一樣了嚶嚶嚶 所以寫個簡陋的總結,肥腸簡陋,只適合 gql 複習用,不建議學習用 然後先推薦兩篇部落格,orz yyb 的部落格 qwq 我之前就是看這個學的 qwq orz xzy 學長的部落格...
Trie樹的二三事QWQ
寫在前面trie,又稱字典樹,是一種用於實現字串快速檢索的多叉樹結構。trie的每個結點都擁有若干字元指標,若在插入或檢索字串時掃瞄到乙個字元c,就沿著當前節點的c這個字元指標,走向該指標指向的結點。我的沒有指標的版本理解 樹上的每個結點都記錄了兩個資訊,一是這個結點所代表的字元,二是這個字元是否是...