/* 返回顶部 */

随笔分类 -  动态规划————状压DP

摘要:gate 一个很难想的题qaq 数据范围很小,可以状压DP。 考虑用二进制表示长方形状态: 横着的块两个格都为1,竖着的块上面为0,下面为1。 像这样,上面的格为1时,下面的可以随便放;上面的格为0时,下面必须为1。 用一个函数判断$i$行状态为$x$,$i-1$行状态为$y$是否合法: 设当前枚举 阅读全文
posted @ 2020-06-15 15:52 Mogeko 阅读(156) 评论(0) 推荐(0)
摘要:gate 状压DP,感觉状态不太好想... 设$f[i][j][k]$表示前i行,有j列放了1个,有k列放了2个。 对当前列放棋子的情况进行分类讨论: 放0个 直接从上一行转移: \(f[i][j][k] = f[i-1][j][k]\) 放1个 放在有0个棋子的列:\(f[i][j][k] += 阅读全文
posted @ 2020-06-15 10:32 Mogeko 阅读(113) 评论(0) 推荐(0)
摘要:gate 还是状压dp... 因为int开成bool了de了好久,最后还是wjh帮忙看出来的qaq f[i][k][j]代表第i行,状态为j,上一行状态为k,上上行的状态为kk 四重循环,保证j,k、j,kk、k,kk不冲突的前提下,有: f[i][k][j] = max(f[i][kk][k] + 阅读全文
posted @ 2019-10-21 13:56 Mogeko 阅读(123) 评论(0) 推荐(0)
摘要:gate 第二道状压dp... 预处理每种状态j所含1的个数为sum[j] f[i][j][l]代表第i行,状态为j,当前共有l个国王 枚举本层状态j,上一层状态k,判断八方向是否有相邻:k&j||(k<<1)&j||(k>>1)&j 枚举国王数l,则有f[i][j][l] += f[i-1][k] 阅读全文
posted @ 2019-10-05 21:09 Mogeko 阅读(123) 评论(0) 推荐(0)
摘要:gate 前置知识 位运算常用方法 判断一个数字x二进制下第i位是不是1 return ((1<<(i−1))&x)?true:false 将一个数字x二进制下第i位更改成1。 x=x|(1<<(i−1)) 把一个数字二进制下最靠右的第一个1去掉。 x=x&(x−1) 判断一个数是否为2的幂 ret 阅读全文
posted @ 2019-09-19 20:03 Mogeko 阅读(169) 评论(0) 推荐(0)