随笔分类 -  ACM / 动态规划 状压dp

摘要:原题链接 考察:状压dp 虽然在二分图题单里...但我感觉是考察的状压dp.. 思路: \(n<=15\),枚举二进制,0是一个集合,1是一个集合.二分图存在当且仅当图内两点集合不存在边.我们求最小的边集合即可. ##Code #include <iostream> #include <cstrin 阅读全文
posted @ 2021-07-15 10:43 acmloser 阅读(20) 评论(0) 推荐(0) 编辑
摘要:原题链接 考察:数论+状压dp 思路: 很明显要选$gcd(L_i) = 1$,且成本和最小的卡片.如果用背包dp会MLE.从单个考虑,枚举一个$L_i$,它的质因数总数不超过9个.这里就可以用状压dp,枚举其他$L_i$,如果不能整除质因子$p$,就在那一位赋1,最后取最小值即可. ##Code 阅读全文
posted @ 2021-06-29 10:12 acmloser 阅读(47) 评论(0) 推荐(0) 编辑
摘要:原题链接 考察:状压dp+dfs寻找路径 思路: 重复覆盖问题.参考愤怒的小鸟的思路,我们需要两两构造一个包含两个字符串a,b的DNA序列,然后要分a在前面与b在前面两种情况. 本蒟蒻一开始想的是定义结构体String,再定义结构体内部的st(二进制标记哪些串被标记),构造后的具体字符串s.每个状态 阅读全文
posted @ 2021-04-04 10:01 acmloser 阅读(58) 评论(0) 推荐(0) 编辑
摘要:原题链接 考察:状压dp 这也能状压?果然是我太弱了. 思路: 很容易想到压缩相同的数字,采取最暴力的做法就是将m个数字全排列计算代价的最小值.时间复杂度是O(m!)会T爆,所以需要优化. 假设有队列3个,我们队列顺序为1 2和队列顺序2 1,最后放3.可以发现如果确定了1 2和2 1的最小值后,放 阅读全文
posted @ 2021-04-03 21:01 acmloser 阅读(72) 评论(0) 推荐(0) 编辑
摘要:原题链接 考察:状压dp 重复覆盖模型,最优解是用dancing links.这里dp可以比暴力dfs稍微优化. 本蒟蒻的思路: 枚举两个点(横坐标不能相同)构造一条抛物线.再对每一条抛物线看是否还有点能被该抛物线覆盖.最后dp求到达(1<<n)-1的最短距离. 除法一定要注意判0 1 #inclu 阅读全文
posted @ 2021-04-03 15:32 acmloser 阅读(108) 评论(0) 推荐(0) 编辑
摘要:原题链接 考察:状压dp 完全没想到状压dp,思路全跑dfs了,但是dfs又觉得m范围不定数据可能很大....然后被卡死了.... 题解参考了这位po主,写得比本蒟蒻好 GO 思路: 参考状压dp模板哈密顿路径f[i][j]表示到达i状态且最后落脚点为j的方案数,f[i|1<<j][j] += f[ 阅读全文
posted @ 2021-03-26 16:28 acmloser 阅读(71) 评论(0) 推荐(0) 编辑
摘要:原题链接 考察:状压dp 错误思路: 贪心思想,每个作业用ed-cost = st排序,输出路径就是排序后的路径. 错误数据12 a 6 14 b 10 7 很明显可以发现如果数据中出现了ed-cost <0就会错误,按贪心思路是先选a,但是最优解是先选b.很明显先做完能及时做完的可以减少减去的分数 阅读全文
posted @ 2021-03-13 21:41 acmloser 阅读(65) 评论(0) 推荐(0) 编辑
摘要:原题链接 考察:状压dp 本蒟蒻是完全没思路...基本照抄大佬代码 照搬大佬的思路: 首先要知道包围两个点的最小矩形面积是两个点刚好在矩形的对角线上.根据这个我们构造n*(n-1)/2个矩形.对于每个点我们检查矩阵是否将它包含在内部,如果包含就记录下来.这样每个矩形都有它包含的点集.根据这个dp方程 阅读全文
posted @ 2021-02-15 01:08 acmloser 阅读(19) 评论(0) 推荐(0) 编辑
摘要:原题链接 考察:状压dp POJ 3254的延伸题 思路: 讲牛的需求看成看成肥沃的土地,也就是把谷仓看成一个矩阵.与牛的需求相符的位置可以养牛.这样就变成了POJ 3254差不多的题.f[i,j]表示前i头牛谷仓的养殖情况.状态转移方程是f[i][j] += f[i-1][k]. 这道题直接枚举i 阅读全文
posted @ 2021-02-14 22:12 acmloser 阅读(78) 评论(0) 推荐(0) 编辑
摘要:原题链接 考察:状压dp 思路: 考虑到计算三角形,我们需要知道落脚点i和前一个落脚点j,所以需要三维数组.根据状态转移方程f[i][j][k] = f[i-{j}][k][t]+score很容易求出最大的权值.但是比较难想到怎么计算路径数目(对本蒟蒻而言).方法是再声明一个记录当前路径最大值的方案 阅读全文
posted @ 2021-02-14 18:28 acmloser 阅读(66) 评论(0) 推荐(0) 编辑
摘要:原题链接 考察:状压dp 本题是731. 毕业旅行问题的延伸 思路: 与上面那道题不同的是每个点至少走一次,而不是只能走一次.普通的dp求出的是0到i点的最短距离(且每个点都经过一次),但这里我们还需要回程,也就是还需要求出i到0点的最短距离.我们手操可以发现ans=每个点都经过一次的最短距离+回程 阅读全文
posted @ 2021-02-14 13:07 acmloser 阅读(46) 评论(0) 推荐(0) 编辑
摘要:原题链接 考察:状压dp 这个是AcWing 1064. 小国王那道题的扩展 思路: 这道题与小国王的区别在于前两行影响当前行.并且这道题我们求的是炮的最大数量.有几点必须说明: 不能效仿小国王开dp数组f[i,i行状态],如果这样写状态转移方程就是f[i,j] = f[i-2,k]+cnt[j]+ 阅读全文
posted @ 2021-02-14 02:13 acmloser 阅读(52) 评论(0) 推荐(0) 编辑
摘要:原题链接 考察:状态压缩dp 这道题是 91. 最短Hamilton路径 的变种 思路: 很容易在优先级问题上陷入死循环(仅限本蒟蒻),实际上一开始做的时候,第一个汉堡要求食材必须是0,等同于从0点出发.设置f[0]=0,其他都=-99999999这样就可以避免样例给的死循环问题. 以i状态更新可以 阅读全文
posted @ 2021-02-13 19:20 acmloser 阅读(55) 评论(0) 推荐(0) 编辑
摘要:原题链接 考察:状压dp 这道题的扩展题 91. 最短Hamilton路径 思路: 首先要处理这几点: 可以以任意点为出发点,也就是说初始化f[i点为1,其余点为0的状态][i] = 0. 预处理10位以内的3进制数. 设定f[i][j]为最后的落脚点为i,此时的状态为j.集合划分为倒数第二个点为k 阅读全文
posted @ 2021-02-13 16:20 acmloser 阅读(49) 评论(0) 推荐(0) 编辑
摘要:原题链接 考察:状压dp 思路: 预处理连续1的状态,再处理能放在第i行的状态.递推时枚举pos[i]和pos[i-1]的状态即可. 注意: 位运算==的优先级高于& 1 #include <iostream> 2 #include <cstdio> 3 #include <cstring> 4 # 阅读全文
posted @ 2021-02-13 13:05 acmloser 阅读(36) 评论(0) 推荐(0) 编辑
摘要:原题链接 原来蒙德里安的梦想和最短路径是两个状压的套路题型....蒟蒻落泪 考察:状压dp 思路: 参考蒙德里安的梦想,本题如果i行的摆放只与i-1行有关.也就是说设i-1行的摆放情况为a,i行为b.要满足这些条件:a&b=0,a无连续1,b无连续1,a|b无连续1. 预处理合法的状态.再枚举合法的 阅读全文
posted @ 2021-02-13 12:14 acmloser 阅读(82) 评论(0) 推荐(0) 编辑