JSOI2015 染色問題

2022-05-02 02:03:07 字數 644 閱讀 7913

傳送門

雖然不是第一反應,不過還是想到了要容斥。

題意轉化:需要求滿足 \(n + m + c\) 個條件的方案數。

然後我們就列舉三個數 \(i, j, k\) ,表示當前方案中,至少不用 \(k\) 種顏色,至少不塗 \(i\) 行、至少不塗 \(j\) 列。

然後直接組合數算(式子不難看懂),最後容斥即可。

那麼寫出來就是:

\[ans = \sum_^n \sum_^m \sum_^c (-1)^ (c - k + 1)^

\]

#include #define rg register

#define file(x) freopen(x".in", "r", stdin), freopen(x".out", "w", stdout)

template < class t > inline void read(t& s)

const int _ = 404, p = 1e9 + 7;

int n, m, c, n, x, ans, c[_][_], pow[_][_ * _];

int main()

printf("%d\n", (ans % p + p) % p);

return 0;

}

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染色問題

好像這個容斥還是明顯的。一共有三個要求,可以用組合數先滿足乙個,再用容斥解決剩下的兩個維。反正這題資料範圍這麼小,隨便亂搞都可以 用 a k i 表示使用 k 種顏色,至少有 i 列沒有染色的方案數,可以容斥預處理得到使用 k 種顏色染色使得每行每列均被染色的方案數。然後再容斥一下保證每種顏色都用上...

JSOI2015 子集選取

傳送門 看到這個資料範圍,就知道肯定是要找規律。如果把集合看成乙個長度為 n 的 01 串,0 表示沒有這個元素,1 表示有這個元素,那麼我們可以發現對於題中的約束關係,不同位上的 01 之間不會互相影響。那麼我們只需要對於只有一位也就是 n 1 的情況計算出方案 記為 x 那麼最後的答案就是 x ...