状压 dp
andyc_03
这个作者很懒,什么都没留下…
展开
-
【AC自动机+状压dp】HDU2825 Wireless Password
题意 :输入n(1<=n<=25)、m(0<=m<=10)、k,意思就是给你 m 个模式串,问你构建长度为 n 至少包含 k 个模式串的方案有多少种 mod20090717直接进行计数一定是比较麻烦的,又发现m比较小,所以我们可以进行一下状态压缩再继续进行计算记dp[i][k][s]为长度为i,在AC自动机上j位,拥有的模式串集合为s的方案数此外AC自动机上每个点还有处理出来一个当前包含哪些模式串的集合这个dp还要滚动一下数组,要不然会T!!代码...原创 2021-01-16 23:29:14 · 90 阅读 · 0 评论 -
【状压dp】P1879 [USACO06NOV]Corn Fields G
记f[i][s]为第i行种草状态为s的方案数对于读入,我们要先处理出来每行的可行方案去一行一行推!代码#include<iostream>#include<cstdio>#include<cstdlib>#include<cstring>#include<algorithm>using namespace std;int n,m;const int mod=1e8;struct point{ int s..原创 2020-11-05 23:38:55 · 73 阅读 · 0 评论 -
【状压dp】P3052 [USACO12MAR]Cows in a Skyscraper G
题目描述给出n个物品,体积为w[i],现把其分成若干组,要求每组总体积<=W,问最小分组。(n<=18)我们用1代表这个物品已经在背包里了,0表示不在背包,那么我们可以直接定义一维的数组,f[i]就代表当前状态为i时最小的组数最终的答案就是f[(1<<n)-1]我们可以开一个数组来记录当前状态下剩余的体积代码#include<bits/stdc++.h>using namespace std;const int inf=0x3f3..原创 2020-08-08 14:38:06 · 317 阅读 · 2 评论 -
【状压dp】CF906C Party
这道题目数据范围22,可以想到用状压来解,考虑到互相认识的顺序对答案没有影响,所以直接用s压缩状态,进行转移即可们还有就是要保存一下路径。注:这道题目有可能开始就都互相认识,所以要做个预判。代码#include<bits/stdc++.h>using namespace std;const int maxn=35;const int maxm=(1<<22)+100;const int inf=0x3f3f3f3f;int n,m,f[maxm],..原创 2020-08-08 08:40:51 · 116 阅读 · 0 评论 -
【状压dp】[HDU1400 & poj2411] Mondriaan‘s Dream
对于棋盘上每个点,都有几种可能,1.不放 2.横放的前一个 3.横放的后一个 4.竖放的上一个 5.竖放的下一个由于题目要求每个格子都被填满,所以可能1不存在然后,我们可以考虑用1表示这个格子被放上了2/3/5这几种可能,然后通过二级制压缩状态对于每一行都有一个数值来表示当前行的状态 now 以及上一行的状态 pre我们可以通过dfs将所有的可能的两行之间的状态转移预处理出来再填写第d列的时候 有这样几种可能1.当前位置为可能2,那么就可以把下一个一起处理了,这时候要求上一行...原创 2020-07-27 12:47:13 · 170 阅读 · 0 评论