SOS dp】的更多相关文章

[算法模板]SOS DP 正文 SOS-DP(\(\text{Sum over Subsets}\))是用来解决这样的问题的: 其实就是子集和DP.上面每个\(F[mask]\)里面包含了\(mask\)所有二进制子集的信息.这是一种\(n\log_2 n\)的DP方法. 我们定义一个DP状态\(S(mask,i)\)代表\(mask\)子集中只有最靠右的\(i\)位与其不同的状态. 具体是这样的: 图中描述了\(S(10110,4)\)这个状态和其所有儿子之间的关系. 形象一些解释就是每次我们…
Sum over Subsets(SOS) DP 一.引入 给出一个长度为\(2^n\)的数组\(A\),对于每一个\(mask< 2^n\)要求计算出\(f[mask]=\sum_{sub\in mask}A[sub]\) (其中\(sub\in mask\)表示\(sub\&mask=sub\)) 二.解法 1.暴力 for(int mask = 0; mask < (1<<n); mask++) for(int sub = 0; sub <= mask; sub…
#include<bits/stdc++.h> #define LL long long #define fi first #define se second #define mk make_pair #define PLL pair<LL, LL> #define PLI pair<LL, int> #define PII pair<int, int> #define SZ(x) ((int)x.size()) #define ull unsigned l…
D - Jzzhu and Numbers 这个容斥没想出来... 我好菜啊.. f[ S ] 表示若干个数 & 的值 & S == S得 方案数, 然后用这个去容斥. 求f[ S ] 需要用SOSdp #include<bits/stdc++.h> #define LL long long #define fi first #define se second #define mk make_pair #define PLL pair<LL, LL> #define…
设$ans=\sum\limits_{A \cap B=\varnothing} f(A)g(B) $ 直接暴力枚举子集是$O(3^n)$, 一个技巧是先预处理出$h(S)=\sum\limits_{T\subseteq S}g(T)$ 然后$ans=\sum\limits_{S\subseteq 2^{U}} f(S)g(2^{U}\backslash S)$ 这样复杂度就是$O(n2^n)$…
2018 ACM-ICPC, Syrian Collegiate Programming Contest A Hello SCPC 2018! 水题 B Binary Hamming 水题 C Portals 思路:并查集维护连通性 代码: //#pragma GCC optimize(3) //#pragma comment(linker, "/STACK:102400000,102400000") //c++ // #pragma GCC diagnostic error &quo…
枚举子集: 复杂度:O(2^k) )&s); 用sos dp求解子集和以及父集和 子集和: ; i <= k; i--) { ; mask < (<<k); mask++) { ) dp[mask][i] = cnt[mask]; <<i)) dp[mask][i] = dp[mask^(<<i)][i-] + dp[mask][i-]; ]; } } 父集和: 转移方向与上相反,优化一维空间 ; mask < (<<k); mas…
B. Mysterious LCM 做法 保留 \(a_i|x\) 的元素,其它元素解体. \(a_i\) 的某个质因子的指数,要和 \(x\) 的这个质因子一样多,才有贡献,否则这个质因子它在划水啊. 那么问题转化为选出极少的数字,使得每个数字不划水的质因子并起来等于 \(x\) 的全体质因子集合. 把不划水的质因子集合分类,等价于选出种类最少的集合,并出 \(x\) 质因子全集,一个优化:如果集合 B 是集合 A 的子集,集合 B 可以去除. 比赛时做法不是很合理,复杂度为 \(O(\bin…
目录 \(\bf {Round \ \#500 \ (Div. \ 1)}\) \(\bf {Round \ \#589 \ (Div. \ 2)}\) \(\bf {Avito \ Cool \ Challenge \ 2018}\) \(\bf {Round \ \#545 \ (Div. \ 1)}\) \(\bf {Round \ \#454 \ (Div. \ 1)}\) \(\bf {Round \ \#575 \ (Div. \ 3)}\) \(\bf Codefest \ 19\…
A 水题 B 直接看2,发现`unordered_map被卡了...` 乖乖离散化 C 有六种水管,可以任意的旋转,使得有一条从(1, 0)到(2, n)的通路. 找规律,当时写D没来得及看 #include<cstdio> #include<cstring> #include<algorithm> #include<iostream> #include<queue> #include<cmath> #include<map&g…