JSOI2015 子集選取

2022-05-02 02:03:09 字數 995 閱讀 6598

傳送門

看到這個資料範圍,就知道肯定是要找規律。

如果把集合看成乙個長度為 \(n\) 的 \(01\) 串, \(0\) 表示沒有這個元素, \(1\) 表示有這個元素,

那麼我們可以發現對於題中的約束關係,不同位上的 \(01\) 之間不會互相影響。

那麼我們只需要對於只有一位也就是 \(n = 1\) 的情況計算出方案(記為 \(x\))那麼最後的答案就是 \(x ^ n\) 。

現在考慮如何計算 \(x\) 。

根據題目的限制,不難發現每一行都是乙個全是 \(1\) 的字首,而且第 \(i - 1\) 行的字首要比第 \(i\) 行的不短。

那麼我們設 \(f_\) 表示選到第 \(i\) 行其中第 \(i\) 行選了乙個長度為 \(j\) 的字首的方案。

轉移很簡單:

\[f_ = \sum\limits_^ f_

\]不難發現這個東西和楊輝三角有點像。

因為在楊輝三角中,乙個數等於它右上方那個數往左上方的字首的和。

所以我們可以進一步發現 \(f_ = f_ + f_\)

那麼和楊輝三角類似的,第 \(k\) 行的和也就是 \(\sum_^k f_ = 2^k - 1\)

然後再加上全是零的一種情況總共就是 \(2^k\) 種方案。

綜上所述,最後的答案就是 \(2^\) 。

#include #define rg register

#define int long long

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

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

const int p = 1e9 + 7;

int n, k;

inline int power(int x, int k)

signed main()

BZOJ4475 Jsoi2015 子集選取

1 leq n,k leq 10 9 集合s中每個元素互不影響,不妨依次考慮其中乙個元素在三角形中的出現情況 問題轉化為乙個 0 1 的三角形 用 0 表示選了,1 表示沒選,那麼如果 a 為 1 則 a 左邊和上邊都是 1 考慮 n 比較小的情況,可以dp f i 表示乙個 i i 的三角形的方案...

JSOI2015 染色問題

傳送門 雖然不是第一反應,不過還是想到了要容斥。題意轉化 需要求滿足 n m c 個條件的方案數。然後我們就列舉三個數 i,j,k 表示當前方案中,至少不用 k 種顏色,至少不塗 i 行 至少不塗 j 列。然後直接組合數算 式子不難看懂 最後容斥即可。那麼寫出來就是 ans sum n sum m ...

JSOI2015 最小表示

題目大意 盡可能多地去掉乙個有向無環圖上的邊,使得圖的連通性不變。思路 拓撲排序,然後倒序求出每個結點到出度為 0 的點的距離 d 再倒序遍歷每乙個點 x 以 d 為關鍵字對其出邊降序排序,嘗試加入每一條邊,若加邊之前兩點已經連通,則說明這條邊可以刪去。可以用bitset維護圖的連通性,注意原圖是有...