好像這個容斥還是明顯的。一共有三個要求,可以用組合數先滿足乙個,再用容斥解決剩下的兩個維。(反正這題資料範圍這麼小,隨便亂搞都可以)。用 \(a[k][i]\) 表示使用 \(k\) 種顏色,至少有 \(i\) 列沒有染色的方案數,可以容斥預處理得到使用 \(k\) 種顏色染色使得每行每列均被染色的方案數。然後再容斥一下保證每種顏色都用上就可以了。
#include usingnamespace
std;
#define maxn 500
#define cnst 450
#define int long long
#define mod 1000000007
intn, m, k, ans, f[maxn];
ints[maxn], c[maxn][maxn];
intread()
while(c >= '
0' && c <= '
9') x = x * 10 + c - '
0', c =getchar();
return x *k;
}int qpow(int x, int
timer)
void up(int &x, int y)
void
pre()
int get(int
x)signed main()
JSOI2015 染色問題 題解
傳送門 容斥原理 把三個容斥套一起 我們列舉至少有i ii行沒有染色,至少j jj列沒有染色,至少k kk種顏色沒有用到,那麼剩下 n i m j n i m j n i m j 個格仔每個都有c 1 k c 1 k c 1 k種選擇 可以在剩下c k c kc k種顏色中挑一種,也可以不染色 因此...
JSOI2015 染色問題
傳送門 雖然不是第一反應,不過還是想到了要容斥。題意轉化 需要求滿足 n m c 個條件的方案數。然後我們就列舉三個數 i,j,k 表示當前方案中,至少不用 k 種顏色,至少不塗 i 行 至少不塗 j 列。然後直接組合數算 式子不難看懂 最後容斥即可。那麼寫出來就是 ans sum n sum m ...
題解 JSOI2015 圈地
發現一種地要麼歸 a 要麼歸 b 若相鄰兩塊歸屬不同還有額外代價 那麼 a 買就連源點,b 買就連匯點 總收益加上這些值 中間連代價的雙向邊 答案為總收益減去最小割 include include include include include include const int n 160005 ...