loj 300 [CTSC2017]吉夫特 【Lucas定理 + 子集dp】
生活随笔
收集整理的這篇文章主要介紹了
loj 300 [CTSC2017]吉夫特 【Lucas定理 + 子集dp】
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
題目鏈接
loj300
題解
orz litble
膜完題解后,突然有一個簡單的想法:
考慮到\(2\)是質數,考慮Lucas定理:
\[{n \choose m} = \prod_{i = 1} {\lfloor \frac{n}{2^{i - 1}} \rfloor \mod 2^i \choose \lfloor \frac{m}{2^{i - 1}} \rfloor \mod 2^i} \pmod 2\]
即
\[{n \choose m} = \prod_{each.bit.of.n.and.m} {n' \choose m'} \pmod 2\]
如果二進制下有任何一位\(n\)為\(0\)且\(m\)不為\(0\),那么就會出現\(m' > n'\)的項,結果就為\(0\)了
所以結果不為\(0\),當且僅當二進制下\(m\)是\(n\)的子集
所以枚舉子集dp即可【\(f[i]\)表示以\(A[u] = i\)的\(u\)開頭的合法子序列個數】
\([1,n]\)枚舉子集的復雜度是\(O(3^{log(max\{a_i\})})\)
轉載于:https://www.cnblogs.com/Mychael/p/8987024.html
總結
以上是生活随笔為你收集整理的loj 300 [CTSC2017]吉夫特 【Lucas定理 + 子集dp】的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 团队第二次作业
- 下一篇: 第20月第4天 pycharm utf-