SOSdp】的更多相关文章

数位DP:: SoSDP 学习博客(待补) 下面做一些例题: SPECIAL PAIRS 题意 给n个数字,求这些数字有多少对的\(AND\) 结果是0.数字不大于1e6.顺序反相反视为不同的对. 思路 做一个桶排计数.对于每个数\(a_i\) ,与他\(AND\) 是0的数,就是反$ a_i$ 的子集.也即是SoSDP里的F所统计的量了. 代码 #include <bits/stdc++.h> using namespace std; const int MAXN = 2e6+5;; int…
Allowed Letters 最直观的想法是贪心取, 然后网络流取check可不可行, 然后T了. 想到最大流可以等于最小割, 那么我们状压枚举字符代表的6个点连向汇点是否断掉, 然后再枚举64个本质不同的位置, 是否需要切段原点联想它的边, 单次check复杂度64 * 64 用sosdp能优化到64 * 6 #include<bits/stdc++.h> #define LL long long #define LD long double #define ull unsigned lo…
layout: post title: SOSdp author: "luowentaoaa" catalog: true tags: mathjax: true - codeforces - DP i=0 pre=0000 nex=0001 i=0 pre=0010 nex=0011 i=0 pre=0100 nex=0101 i=0 pre=0110 nex=0111 i=0 pre=1000 nex=1001 i=0 pre=1010 nex=1011 i=0 pre=1100…
CF 1400G.Mercenaries 题意: 有\(n\)个佣兵,问雇佣至少一名雇佣兵且满足下述条件的方案数 如果雇佣第\(i\)个佣兵必须要求最终雇佣的总人数\(x\)满足\(l_i\le x\le r_i\) 有\(m\)对佣兵不能同时选 \(1\le n\le 3\times 10^5,0 \le m \le \min(20, \dfrac{n(n-1)}{2})\) 题解: 首先对于第一个限制,我们考虑枚举最终雇佣的总人数来做 对于第二个限制,可以把这些不能同时选的点连边,不考虑单独…
#define IOS ios_base::sync_with_stdio(0); cin.tie(0); #include <cstdio>//sprintf islower isupper #include <cstdlib>//malloc exit strcat itoa system("cls") #include <iostream>//pair #include <fstream>//freopen("C:\\Us…
The Minimum Number of Variables 我们定义dp[ i ][ mask ]表示是否存在 处理完前 i 个a, b中存者 a存在的状态是mask 的情况. 然后用sosdp处理出,状态为state的a, 能组成的数字, 然后转移就好啦. #include<bits/stdc++.h> #define LL long long #define LD long double #define ull unsigned long long #define fi first #…
题意:求满足条件的(i,j)对数:\(gcd(v,a_i)=x,lcm(v,a_j)=y\) 题解:\(x|a_i,a_j|y\),\(x|y\),考虑质因子p,假设a_i中p次数为a,x中次数为b,y为c,\(a_j\)为d;a>=b,c>=d. 假设a>b,c>d,那么由于\(gcd(v,a_i)=x\),v中p的次数为b,由于\(lcm(v,a_j)=y\),那么\(max(b,d)==c\),又c>d,所以b=c<a和x|y矛盾,所以此时ij不满足条件 其他情况…
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…
CF1208F Bits And Pieces 传送门 思路 这里要运用SOS-DP的思路(\(\text{Sum over Subsets}\)).我在另外一篇博客里介绍过,如有需要可以搜索一下我的博客. SOS-DP是记录每个\(mask\)所有子集的信息,而这道题只需要记录每个\(mask\)所有超集的信息即可.\(dp[mask]\)记录的是能满足\(mask\)是其的子集的所有数中坐标最大的两个.我们枚举\(a_i\),然后贪心的按位取就可以了.具体细节可以看代码. 代码 #inclu…