![](https://img-blog.csdnimg.cn/20201014180756754.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
状压DP
FSYo
我不去想是否能够成功,
既然选择了远方,
便只顾风雨兼程
展开
-
【省选模拟】20/04/20 Fygon(建图)(状压DP)
对于每个循环 for(i←[j,k])for(i\leftarrow [j,k])for(i←[j,k]),如果不考虑 j>kj>kj>k 的话,答案就是一个积分的式子(暴力维护每一项的系数积上去就没了),现在就很头疼膜了题解感觉有点巧妙,考虑积分的组合意义,就是在积分区间随便洒个点,那么发现系数就是不同的大小关系数(相等的情况可以不用管,因为这样次数会减一),于是按不等关系...原创 2020-04-20 23:32:33 · 269 阅读 · 0 评论 -
「THUWC 2017」随机二分图(状压DP)(概率DP)
传送门首先有 40pts40pts40pts 暴力就是枚举排列算概率,还有就是直接状压 f[i][S]f[i][S]f[i][S] 表示左边选到 iii 右边集合为 SSS 的概率想一想,最后求的是什么,就是我们钦定一些边必须选使得有完美匹配,然后将这些边一起出现的概率乘起来作为贡献把 1 类边和 2 类边都拆成 0 类边考虑若最后钦定的边中 1 类的两条同时出现,那么它们两个的贡献是 1...原创 2019-12-11 19:09:20 · 259 阅读 · 1 评论 -
[九省联考2018]一双木棋chess [状压/轮廓线DP]
传送门DP 比较明显了,但麻烦的是如何记录状态我们发现,如果按题目要求放的话,第一排个数一定 >= 第二排 >= 第三排于是我们就想出一种方法将状态压缩起来构造一个 0/1 序列,共 n + m 位,其中如果这一位是 1, 那么它后面的 0 的个数就是它这一排选的个数比如 00011 为初始状态, 11000为终止状态,00101表示第一排选了1个,第二排选了0个的...原创 2019-07-24 23:14:48 · 177 阅读 · 0 评论 -
[PKUWC2018]随机算法 [概率DP+状压DP]
传送门看到 n <= 20 应该想到状压 !每个点有3个状态, 被考虑过在集合中, 被考虑过不在集合中, 没有被考虑过很明显状态太多, 我们看怎么压成两个状态首先在集合中必须要, 状态设为1, 那么不在集合中, 不管有没有考虑我们都设成0换句话说, 不能放进集合的点我们不需要知道它是谁, 只需要知道个数就可以了我们设 f[i][S] 表示考虑了 i 个点, 集合为 S...原创 2019-07-15 10:51:00 · 132 阅读 · 0 评论 -
P3052 [USACO12MAR]摩天大楼里的奶牛 [状压DP]
传送门用f[i]记录状态为i的最小值g[i] 记录状态为i 的剩下电梯的空间的最大值#include<bits/stdc++.h>#define N 19using namespace std;int f[1<<N],g[1<<N];int n,a[N],w;int main(){ scanf("%d%d",&n,&am...原创 2018-12-20 18:26:20 · 236 阅读 · 0 评论 -
奖励关[记忆化搜索][状压DP]
传送门 n<=15 直接状压 , f[i][j]表示到i , 1--i-1选了哪些 的期望分值 #include<bits/stdc++.h>#define N 1<<15#define K 105using namespace std;int n,k,s[K],val[K]; double f[K][N],inf;double dfs(i...原创 2018-11-26 20:51:52 · 162 阅读 · 0 评论 -
单词游戏[状压DP]
传送门f[i][j] 表示状态为i , 以j结尾的单词的最大长度#include<bits/stdc++.h>#define N 20#define M 1<<16using namespace std;int f[M][N],n,inf,len[N],ans;char ch[N][105],st[N],ed[N];int main(){ sca...原创 2018-11-28 22:31:46 · 142 阅读 · 0 评论 -
互不冒犯[状压DP]
传送门#include<bits/stdc++.h>#define N 10#define M 1<<N#define LL long longusing namespace std;int n,k,cnt[M],sta[M],ret;LL f[N][M][N*N],ans;bool pd(int x,int y){ return x&y ||...原创 2018-11-07 21:10:45 · 188 阅读 · 0 评论 -
愤怒的小鸟[状压DP]
传送门预处理所有可能的抛物线可以打哪些猪,存在g数组中f[i] 表示打了猪的状态 #include<bits/stdc++.h>#define N 20#define M 1<<20#define eps 0.00000001using namespace std;int f[M],g[N*N],cnt;int T,n,m,vis[N];d...原创 2018-11-04 10:49:06 · 183 阅读 · 0 评论 -
Corn field[状压DP]
题目描述农夫有一块地,被划分为 m 行 n 列大小相等的格子,其中一些格子是可以放牧的(用1标记),农夫可以在这些格子里放牛,其他格子则不能放牛(用0标记),并且要求不可以使相邻格子都有牛。现在给出这块地的大小及可否放牧的情况,求该农夫有多少种放牧方案可以选择(注意:任何格子都不放也是一种选择,不要忘记考虑!)。输入格式第一行,是两个用空格隔开的整数:M 和 N(1≤M,N≤12)。...原创 2018-11-03 23:44:15 · 220 阅读 · 0 评论 -
上升序列[三进制状压DP]
描述给出一个长度为 m 的上升序列 A(1 ≤ A[i]≤ n), 请你求出有多少种 1...n 的排列, 满足 A 是它的一个 LIS.输入第一行两个整数 n,m.接下来一行 m 个整数, 表示 A.输出一行一个整数表示答案.样例输入【输入样例1】5 31 3 4【输出样例1】11【输入样例2】4 23 4【输出样例2】5【数据范围与约定】...原创 2018-10-05 23:07:37 · 433 阅读 · 1 评论 -
Movie[状压DP]
题目描述:小石头喜欢看电影,选择有 N 部电影可供选择,每一部电影会在一天的不同时段播放。他希望连续看 L 分钟的电影。因为电影院是他家开的,所以他可以在一部电影播放过程中任何时间进入或退出,当然他不希望重复看一部电影,所以每部电影他最多看一次,也不能在看一部电影的时候,换到另一个正在播放一样电影的放映厅。请你帮助小石头让他从 0 到 L 连续不断的看电影,如果可以的话,计算出最少看几部电...原创 2018-09-16 19:53:01 · 339 阅读 · 0 评论 -
偷书[状压DP]
题目描述:在 L 的书架上,有 N 本精彩绝伦的书籍,每本书价值不菲。M 是一个书籍爱好者,他对 L 的书籍早就垂涎三尺。最后他忍受不了诱惑,觉得去偷 L 的书,为了迅速完成这件事,同时他不希望 L 很快发现书籍少了,他决定偷书时,对于任意连续的 K 本书,他最多选 B 本,最少选 A 本。现在他想知道怎么选出来的书本最后使得偷的书籍的价值和,与剩下的书籍价值和,差值最大。输入格式:...原创 2018-10-04 11:50:04 · 115 阅读 · 0 评论