2019年7月13日

矩阵乘法分配律+bitset优化——hdu4920

摘要: 因为是模3,所以把原矩阵拆成两个01矩阵,然后按分配律拆开分别进行矩阵乘法,行列用bitset来存进行优化即可 注意 int bitset<int>::count() 函数可以统计bitset里有多少1 int bitset<int>::any() 函数可以统计bitset里是否有1 阅读全文

posted @ 2019-07-13 21:36 zsben 阅读(883) 评论(0) 推荐(0) 编辑

二分图染色+分组背包+bitset优化——hdu5313

摘要: 首先就是求联通块,每个联通块里记录两个部分的元素个数 目标是使一边的体积接近n/2 那么每个联通块作为一组,进行分组背包,dp[i]表示体积i是否可以被凑出来,可行性背包是可以用bitset优化的 最后找最接近n/2的体积即可 阅读全文

posted @ 2019-07-13 20:06 zsben 阅读(210) 评论(0) 推荐(0) 编辑

字符串匹配dp+bitset,滚动数组优化——hdu5745(经典)

摘要: bitset的经典优化,即把可行性01数组的转移代价降低 bitset的适用情况,当内层状态只和外层状态的上一个状态相关,并且内层状态的相关距离是一个固定的数,可用bitset,换言之,能用滚动数组是能用bitset优化的前提 阅读全文

posted @ 2019-07-13 17:12 zsben 阅读(183) 评论(0) 推荐(0) 编辑

01二维背包+bitset优化——hdu5890

摘要: 口胡一种别的解法: 三重退背包,g1[j]k]表示不选x的选了j件物品,体积为k的方案数,g[0][0] = 1 , g1[j][k]=dp[j][k]-g1[j-1][k-a[x]] 然后按这样再退三层,最后看g3[10][87]的方案数是否非0即可,这样复杂度是O(50*50*50*10*87) 阅读全文

posted @ 2019-07-13 11:48 zsben 阅读(488) 评论(0) 推荐(0) 编辑

01二维背包——poj2576

摘要: /* 要求把a数组分成两个集合,两个集合人数最多差1,并且元素之和的差尽可能小 那只要把所有可行的列出来即可 01二维背包,即体积是个二维数据,那么我们的背包状态也应该设为二维 dp[j][k]设为 有j个人,体积为k的状态是否可行 第一维上限是人数的一般,第二维上限是元素总和的一半 */ #include #include #include using namespace std;... 阅读全文

posted @ 2019-07-13 10:42 zsben 阅读(203) 评论(0) 推荐(0) 编辑

导航