「状压DP」「暴力搜索」排列perm】的更多相关文章

「状压DP」「暴力搜索」排列 题目描述: 题目描述 给一个数字串 s 和正整数 d, 统计 sss 有多少种不同的排列能被 d 整除(可以有前导 0).例如 123434 有 90 种排列能被 2 整除,其中末位为 2 的有 30 种,末位为 4 的有 60 种. 输入格式 输入第一行是一个整数 TTT,表示测试数据的个数,以下每行一组 s 和 d,中间用空格隔开.s 保证只包含数字 0,1,2,3,4,5,6,7,8,9 输出格式 每个数据仅一行,表示能被 d 整除的排列的个数. 输入输出样例…
题意 你有一个\(h\times w\)的棋盘,你需要在每个格子里填\([1, m]\)中的某个整数,且满足\(n\)个矩形限制:矩形的最大值为某定值.求方案数\(\bmod 10^9+7\) \(h, w, m\leq 10^4,n\leq 10\) 题解 首先来考虑单独的一个矩形限制怎么做.假设矩形面积为\(s\),最大值为\(v\) 易得答案是\(v^{s}-(v-1)^{s}\),意思就是每个数随便选,然后减去所有数\(<v\)的方案 现在考虑\(n\)个限制,实际上把棋盘分成了\(O(…
题意:给一个的格子图,有 n 行单元格,每行有a[i]个格子,要求往格子中填1~m的数字,要求每个数字大于等于左边的数字,大于上边的数字,问有多少种填充方法. 析:感觉像个DP,但是不会啊...就想暴力试试,反正数据量看起来不大才7,但是...TLE了,又换了一个暴力方法,2秒多过了,差点啊. 其实这是一个状压DP,dp[i][s]表示在第 i 列,在集合 s 中有方法数,那么怎么转移呢,这个还是挺简单的,就是判断第i+1列是不是比第 i 列都大于等于就ok了, 输入时先把行,转化成列,再计算,…
题意 求一个\(1\sim n\)的排列LIS的期望长度,\(n\leq 28\) 题解 考虑朴素的LIS:\(f[i] = min(f[j]) + 1\) 记\(mx[i]\)为\(f\)的前缀最大值,那么可以得到一个性质\(mx[i + 1] \in [mx[i], mx[i] + 1]\) 对\(mx\)数组进行差分,则差分数组只有\(01\),可以状压 由于\(mx[1] - mx[0]=1\),从第二位开始状压 然后考虑从\(1\sim i\)的排列推到\(1\sim i+1\)的排列…
传送门 >Here< 题意:用1*2的砖块铺满n*m的地板有几种方案 思路分析 状压经典题! 我们以$f[i][j]$作为状态,表示第i行之前全部填完并且第i行状态为j(状压)时的方案数. 我们考虑,对于一个格子,一块砖有3种方法. (一):横着放.对下一行没有任何影响 (二):竖着放,并且当前这一格作为砖块的下层.那么对下一行也没有任何影响 (三):竖着放,并且当前这一格作为砖块的上层.这种情况对下一行很明显是有影响的. 综上,只有情况3是对下一行有影响的. 所以我们需要一种方法来区分前两种…
题意 你有\(n\)个物品,物品和硬币有\(A\),\(B\)两种类型,假设你有\(M\)个\(A\)物品和\(N\)个\(B\)物品 每一轮你可以选择获得\(A, B\)硬币各\(1\)个,或者(硬币足够)花\(\max(a_i - M, 0)\)个\(A\),\(\max(b_i - N, 0)\)个\(B\)买\(i\)这个物品 问买到所有物品最少要多少轮 题解 巧妙的\(dp\),考虑间接设计状态 \(f[S][A] = B\)表示\(S\)这个集合买过了,\(A\)类花\(\sum a…
题目描述 现在有一个长度为n的随机排列,求它的最长上升子序列长度的期望. 为了避免精度误差,你只需要输出答案模998244353的余数. 输入 输入只包含一个正整数n.N<=28 输出 输出只包含一个非负整数,表示答案模998244353的余数. 可以证明,答案一定为有理数,设其为a/b(a.b为互质的整数),你输出的整数为x, 则你需要保证0≤x<998244353且a与bx模998244353同余. 样例输入 2 样例输出 499122178 题解 状压dp+打表 套路:对于排列问题,从左…
一.关于状压 dp 为了规避不确定性,我们将需要枚举的东西放入状态.当不确定性太多的时候,我们就需要将它们压进较少的维数内. 常见的状态: 天生二进制(开关.选与不选.是否出现--) 爆搜出状态,给它们编号 1. 状态跟某一个信息集合内的每一条都有关.(如 dp 套 dp) 2. 若干条精简而相互独立的信息压在一起处理. (如每个数字是否出现) 在使用状压 dp 的题目当中,往往能一眼看到一些小数据范围的量,切人点明确.而有些题,这样的量并不明显,需要更深人地分析题目性质才能找到. 二.预备知识…
前言 考试被\(hyj\)吊着打... Solution 考虑一下如果前缀和如果在某一个位置的后面的任意一个前缀和都<=0,肯定这就是最大的. 然后这样子就考虑左右两边的状压dp,然后就好了. 代码实现 #include<stdio.h> #include<stdlib.h> #include<string.h> #include<math.h> #include<algorithm> #include<queue> #incl…
题目链接 loj2540 题解 有一个朴素三进制状压\(dp\),考虑当前点三种状态:没考虑过,被选入集合,被排除 就有了\(O(n3^{n})\)的转移 但这样不优,我们考虑优化状态 设\(f[i][S]\)表示独立集大小为\(i\),不可选集合为\(S\)[要么是已经在独立集中,要么已经被排除了] 那么剩余点都是可选的 就枚举剩余点\(u\),记\(u\)相邻的集合为\(S_u\),那么当\(u\)加入后,集合\(S_u\)的点都不能选,但是由于所有点都会加入排列之中,\(S_u\)中除了\…