
状压dp
文章平均质量分 69
csu_xiji
这个作者很懒,什么都没留下…
展开
-
力扣 1994. 好子集的数目 数学 状压dp
https://leetcode-cn.com/problems/the-number-of-good-subsets/ 思路一:纯数学暴力解法。首先我们知道一个合数一定可以表示为若干个素数的乘积,因为要求素数不能相同,因此子集中的合数一定不能表示成两个相同素数的乘积。注意到元素的取值范围为[1,30][1,30][1,30],据此我们可以排除一些合数。然后把相同的数合并到一起(记录出现的次数),那么就只剩下大概20个元素了。此时可以暴力枚举选择的情况,然后对选择的数做因数分解统计每个质因子出现的次数,如原创 2021-09-09 00:52:57 · 308 阅读 · 0 评论 -
力扣 526. 优美的排列 回溯 状压dp
https://leetcode-cn.com/problems/beautiful-arrangement/ 思路一:还就内个暴力回溯。究极暴力的解法,枚举所有可能性,加上最简单的剪枝即可。 class Solution { public: int countArrangement(int n) { vector<bool> vis(n+1); int ans=0; function<void(int)> dfs=[&原创 2021-08-17 01:31:27 · 265 阅读 · 0 评论 -
力扣 1787. 使所有区间的异或结果为零 dp 位运算
https://leetcode-cn.com/problems/make-the-xor-of-all-segments-equal-to-zero/ 思路:依据题意,有: nums[i] xor nums[i+1]……xor nums[i+k−1]=0 (1)nums[i+1] xor nums[i+2]……xor nums[i+k]=0 (2) nums[i]\ xor\原创 2021-06-07 22:41:25 · 147 阅读 · 0 评论 -
力扣 1723. 完成所有工作的最短时间 二分+回溯+剪枝/状压dp
https://leetcode-cn.com/problems/find-minimum-time-to-finish-all-jobs/ 思路一:显然最大工作时间满足单调性,所以可以用二分来写。但是每次checkcheckcheck我们只能暴力递归,这样会超时……所以要加上一些剪枝操作……这里简单说一下吧,任务要从耗时多的开始分配,如果第一次分配都没有找到可行解,那么一定没有可行解(该次递归下),如果最优分配没有可行解,那么一定没有可行解(该次递归下)。 class Solution { public原创 2021-05-08 17:35:00 · 493 阅读 · 0 评论 -
POJ 1321 棋盘问题 状压dp
https://vjudge.net/problem/POJ-1321 思路:状压dpdpdp,设dp[i][j]dp[i][j]dp[i][j]表示到第iii行且列状态为jjj时的方案数,如果第iii行不放棋子,那么dp[i][j]+=dp[i−1][j]dp[i][j]+=dp[i-1][j]dp[i][j]+=dp[i−1][j];否则假设在第xxx列放一个棋子,那么如果j&(1&l...原创 2020-03-03 00:04:46 · 221 阅读 · 0 评论 -
codeforces 1051D Bicolorings 状压dp
https://codeforces.com/problemset/problem/1051/D 题目大意:给一个2∗n2*n2∗n的矩阵,每一个位置要么为黑色要么为白色,相邻且颜色相同的方块算作一个连通块,给定kkk,问有多少种着色方法使得这个矩阵中恰好有kkk个连通块。 思路:比较容易想到用dpdpdp来做,考虑用dp[i][j]dp[i][j]dp[i][j]表示前iii列中连通块个数为j...原创 2020-01-19 17:18:19 · 190 阅读 · 0 评论