随笔分类 - 状压DP
摘要:Cunning Gena - 洛谷 | 计算机科学教育新生态 (luogu.com.cn) ki表示显示器数量需求 这点对于dp来说是比较难解决的,所以我们按 k 进行升序排序,这样便可以处理 k 的问题(其实这点有点难想到)。 假设 dp[i][j] 为前i个物品,状态为 j 下的最小价格,那么转
阅读全文
摘要:一道很妙的状压dp,差不过做过才会,数组设置的很妙也很难 我们对 T 字符串进行考虑 首先T字符串每一位 只能是小写字母。 所以我们可以先预处理 T字符串每一位 为某个小写字母时,对应到S字符串集里面,能匹配那些S字符 令f[ i ][ j ]为T字符串第 i 位,为 j 小写字母时,对应到S字符串
阅读全文
摘要:这道题跟 P3092 [USACO13NOV]No Change 很像,比较妙的状压dp 首先M<=20,由这一部分可以从状压入手 首先令dp[i]为状态为 i 时,最少的出队人数 我们知道了 i 的状态,让 i 中的所有队都尝试放在最后排 现在我们要让 j 放在最后排,那么我们已经知道了dp[i^
阅读全文
摘要:一道很妙,也挺有技巧的状压dp题。 我们从k入手,k的范围很小,且本题是按顺序购买的。 接下来是本题的核心:dp[i]是状态为i时,最多能买多少物品数 接下来是dp的状态转移: 我们知道 i 的状态有那些为1,我们把第 j 个钱放在最后花,然后已经知道了 dp[ i^(1<<j) ] 的最优解,便可
阅读全文
摘要:首先是考虑dp状态的问题:这道题主要处理的是 上行和上上行的状态。 假如我们令dp[i][x]来表示状态,仅用dp[i-1][y]来转移是不够的 所以我们dp状态不仅要有本行的状态,还要用上一行的状态。 令dp[i][x][y]为第i行的状态为x,第i-1行的状态为y时,最多的炮兵个数 然后便是预处
阅读全文
摘要:状压dp模板题: dp[i][j][k]为到了第i行,第i行的状态,一共有多少的国王。 预处理出第i行的所有可行的状态,显然不能有国王相邻,也不能有超过k个国王的可能 dp转移: 显然dp[ i ][ x ][ k ]是上一行情况累加过来: dp[i][x][k]+=dp[i-1][y][k-pop
阅读全文
摘要:1.要状压的那一维,所有有关的下标要从0开始,而不是从1开始 2.预处理很重要,可以说基本所有的状压dp都要有预处理这玩意
阅读全文
摘要:这道题最妙的是移入bitset,来统计能组成那些数 令bitset<2010> S; 一开始初始化S[0]=1 对于w[i],S<<w[i]表示原本能组成的数加上w[i]后组成的新数 但原本的数我们依旧是要的,所以便是S=S|(S<<w[i]) S.count返回S中1的个数,但是无符号的数据类型要
阅读全文