題目描述
題解
考慮 $\text$ : $f[i][j][k]$ 表示用前 $k$ 種棋子占領了 $i$ 行 $j$ 列的方案數
考慮 $f$ 的轉移: $f[i][j][k]=\sum_^\sum_^f[l][r][k-1] \times (_^) \times (_^) \times g[i-l][j-l][a[k]]$ ,其中 $g[i][j][k]$ 表示用 $k$ 個同種顏色的棋子占領 $i$ 行 $j$ 列的方案數
考慮 $g$ 的轉移,發現我們可以容斥,即用總方案數-有些行列沒有被占領的方案數,故 $g[i][j][k]=(_k^)-\sum_^\sum_^ [l答案即為: $\sum_^n\sum_^mf[i][j][c]$ ,效率: $o(n^2m^2c)$
**
#include constint p=1e9+9
;int n,m,c,a[15],f[35][35][15],g[35][35][15],jc[905],ny[905
],a;
int c(int x,int
y)int
main()
for (int i=1;i<=n;i++) for (int j=1;j<=m;j++)
for (int l=0;lfor (int r=0;r)
(f[i][j][k]+=1ll*f[l][r][k-1]*c(n-l,i-l)%p*c(m-r,j-r)%p*g[i-l][j-r][k]%p)%=p;
}for (int i=1;i<=n;i++) for (int j=1;j<=m;j++) (a+=f[i][j][c])%=p;
return printf("
%d\n
",(a+p)%p),0
;}
洛谷 P3157 CQOI2011 動態逆序對
對於序列a,它的逆序對數定義為滿足iaj的數對 i,j 的個數。給1到n的乙個排列,按照某種順序依次刪除m個元素,你的任務是在每次刪除乙個元素之前統計整個序列的逆序對數。可以值域分塊,塊套樹狀陣列,樹套樹 不過用序列分塊 vector 一樣能水過這道題 考慮刪去乙個點 x 對答案產生的影響,拿下面的...
洛谷P4170 CQOI2007 塗色
假設你有一條長度為5的木版,初始時沒有塗過任何顏色。你希望把它的5個單位長度分別塗上紅 綠 藍 綠 紅色,用乙個長度為5的字串表示這個目標 rgbgr。每次你可以把一段連續的木版塗成乙個給定的顏色,後塗的顏色覆蓋先塗的顏色。例如第一次把木版塗成rrrrr,第二次塗成rgggr,第三次塗成rgbgr,...
洛谷 P4170 CQOI2007 塗色
假設你有一條長度為5的木版,初始時沒有塗過任何顏色。你希望把它的5個單位長度分別塗上紅 綠 藍 綠 紅色,用乙個長度為5的字串表示這個目標 rgbgr。每次你可以把一段連續的木版塗成乙個給定的顏色,後塗的顏色覆蓋先塗的顏色。例如第一次把木版塗成rrrrr,第二次塗成rgggr,第三次塗成rgbgr,...