A:CF425E Sereja and Sets
- 題意;
給定 \(n\) 個點,其中有 \(m\) 個區間,滿足任意兩點形成的區間被包含其中,端點可重合(所以其實 \(m\) 是個定值),一個區間集合合法,當且僅當從這個區間選出的最多的不重合區間的數量為 \(k\),問你有多少種合法的選擇方案。
輸入格式
輸入僅一行,\(n,k\)。\((1\le n\le 500,\ \ 0\le k\le 500)\)。
輸出格式
輸出一行一個正整數,表示答案。對 \(10^9+7\) 取模。
- 思路:
這題能做,但介於某人是個數數題渣渣,看到就直接跳了qwq
這題我們先考慮一下,當給定一個區間集合,它能選出的最多的不重合區間為多少。
這是個很經典的問題,可以直接將所有區間按右端點排序後貪心去選。
然後看回原題,原題要我們算方案數,那麼可以 dp。
狀態為 \(f_{i,j}\) 表示前 \(i\) 個點,當前選擇的區間的右端點為 \(i\),前一個區間右端點為 \(j\) 時的合法方案數。
首先考慮到方案合法的那個貪心首先我們最後這個區間的左端點必須 \(>j\),然後注意到一個合法方案中,有些區間它可能不在最終的最多選擇中,但是它是在原始區間集合中的,只是沒選它罷了。
那麼這些東西我們不能落,所以得乘上一個係數,具體而言看具體而言。