
状压dp
如题
algsup
这个作者很懒,什么都没留下…
展开
-
[状压dp]leetcode1799:N 次操作后的最大分数和(hard)
题目:题解:这题数据范围这么小,直接暴力枚举 进行状态转移,只有状态 i 中存在两个位 1 的地方,就可以进行状态转移了,当然也可以使用枚举状态 i 的子集 j,count(s)-count(j)==2就可以进行转移了,dp[i]=max(dp[i],dp[j]+count(s)/2*dp[i^j]);,这里的 dp 需要先预处理一下在做。代码如下:class Solution {public: // 思路:状压 dp int maxScore(vector<in原创 2022-01-27 11:44:13 · 389 阅读 · 0 评论 -
[状压dp]leetcode1986:完成任务的最少工作时间段(medium)
题目:题解:思路:状压 dp,枚举子集,学习枚举状态 i 子集的方法。由于 n<=20,可以很方便的使用一个 n 位二进制来表示每个数选与不选。1)预处理 dp 数组,将[0,2^n-1]的所有二进制状态 s 中构成的子集的时间 <= sessionTime 的 dp[s] 初始化为 1。2)进行状态转移方程,即每个状态 s 枚举其子集,更新最小的 dp[s],子集 j 可以从 s 开始枚举,也可以从 s&(s-1) 开始枚举,j 在 s 内的补集为 j ^ s ,然后原创 2022-01-26 21:41:35 · 490 阅读 · 0 评论 -
[状压dp]leeccode1434:每个人戴不同帽子的方案数(hard)
题目:1434. 每个人戴不同帽子的方案数题解:思路:状压dp解法:由于本人刚学习压状dp,且在《算法竞赛进阶指南》上学习了位运算相关的知识,做了两个状压dp的题,思路是学题解的,这里贴一下,记录下吧。代码如下:class Solution {public: //思路:状压dp int numberWays(vector<vector<int>>& hats) { int maxHatId=0,n=hats.siz原创 2021-01-02 21:40:30 · 388 阅读 · 0 评论