dp:状态压缩dp
文章平均质量分 93
ProLightsfxjh
这个作者很懒,什么都没留下…
展开
-
2016 UESTC Training for Dynamic Programming F - 柱爷与三叉戟不得不说的故事 压位dp
压位dpdp[i] 表示状态为i是的最小消费, 状态i则是i的二进制表示以后哪些地方是1表示有已经获得了哪些元素Ind = 1<<0, 表示有元素 1;Ind = 1<<15 表示有元素 15;Ind = 0;Ind += 1<<0;]Ind += 1<<15;然后Ind 表示有元素 1 、15;然后有十五个元素, 所以最多1<<15, 设为 maxi = (1<<15) + 2;然后 for(int i = 0; i < maxi; i++){ for(int j =原创 2016-05-17 11:48:31 · 1227 阅读 · 0 评论 -
HihoCoder - 1044 状态压缩·一 状态压缩dp
题意:给出一个序列,选出一部分值,连续的m个数里最短选取q个,求选出的值的和的最大值。状态压缩dpdpij表示当前考虑第i个数,且以i结尾的连续m个数的情况储存在j里,j用二进制表示以后比如m=5, 10100表示序列选了i-4, i-2,没有选i-3, i-1, i.状态转移的时候,先判断j里有几个1,如果cnt <= q,则为合法状态,t = j >> 1表示当前状态j表示的 前 m-1个数的情况(不包括第i个数)如果 i < m则直接, dp[i][j] = dp[i-1][t] + (j原创 2017-04-29 00:49:39 · 1053 阅读 · 0 评论 -
UESTC 1690 这是一道比CCCC简单题难的简单题 状态压缩dp
状态压缩dp经典例题hihoCoder 1048 : 状态压缩·二这里有更好的讲解。时间复杂度 O(n*m*(1<<m))空间复杂度 O(2*(1<<m))原创 2017-06-11 17:24:05 · 868 阅读 · 0 评论 -
计蒜之道 2017 程序设计大赛 - 计蒜客 复赛 F 腾讯消消乐 状态压缩dp、枚举+剪枝
题意:给出一个长度为n 的序列n(1≤n≤18),每次如果对于区间[L,R],如果gcd([L,R]里的元素) >= k(1≤k≤min{ai})则可以一次性删除,然后剩下的数会合并成为一个连续区间,定义 f(i) 为进行 i 次操作将整个序列删完的方案数。求sigma{f(i)∗i} mod 1000000007。状态压缩dp、枚举+剪枝这里n只有18,2^18 == 262144故可以想到用状态压缩dp来做,dp[i][j]表示已经进行了i次删除操作,且当前的序列状态为j,j的第i个二进制位如果是原创 2017-06-11 19:12:48 · 1426 阅读 · 0 评论