摘要: 嘟嘟嘟 看来状压dp入门题都是这个难度的。 令dp[i][j]表示到了第 i 行,状态为 j 时的方案数。 然后枚举这一行和上一行的状态,则dp[i][j] += dp[i - 1][k]。 预处理合法的种植状态。 还有,判断种植状态符不符合草地状态只能一位一位比较,因为位运算不能辨别两个数的二进制 阅读全文
posted @ 2018-09-10 20:29 mrclr 阅读(127) 评论(0) 推荐(0) 编辑
摘要: 嘟嘟嘟 做完[NOI2001]炮兵阵地这道题,顿时觉得此题好水~~15分钟AC 令dp[i][j][k]表示到第 i 行放了 j 个国王,该行状态为 k 时的方案数。然后dp的时候第一层循环枚举 i,第二层 j,如果j 合法的话,再枚举第三层 i - 1行的状态 k,然后如果k合法且 j 和k不冲突 阅读全文
posted @ 2018-09-10 19:43 mrclr 阅读(147) 评论(0) 推荐(0) 编辑
摘要: 嘟嘟嘟 看到 m <= 10,就知道这道题可定是状压dp。 还是一行一行dp,可见当前第 i 行能否放炮兵,除了和第 i 行的地形有关,还和 i - 1, i - 2行炮兵的放置状态有关。 因此dp要开三维,dp[k][j][i] 表示第 i 行的放置状态为 j, i - 1 行的放置状态为h时最多 阅读全文
posted @ 2018-09-10 19:12 mrclr 阅读(145) 评论(0) 推荐(0) 编辑
摘要: 嘟嘟嘟 这道题感觉和昨天的凉心模拟有点像,不过这一次n和m都是手动输入的,所以矩阵自己画不出来。 但总体的思路还是一样的:状压dp,每一行为一个状态。 考虑每一个状态:对于每一个1 * 2的方块,要么横着放,要么竖着放。竖着放对于这一行相当于这一块的一半。因此,第k位为1表示第 i 行第k列有一个一 阅读全文
posted @ 2018-09-10 16:35 mrclr 阅读(144) 评论(0) 推荐(0) 编辑
摘要: 嘟嘟嘟 dfs后,如果 low[v] >= dfn[u],则 u 就是割点。 不过如果 u 是搜索树的根节点的话,还要判断他至少有两个出边,而且这个判断必须加在v没有被走到的前提下。这样就表示有一些点只能通过根节点走到,那么如果这种点多于1个的话,根节点就是割点了。 1 #include<cstdi 阅读全文
posted @ 2018-09-10 15:09 mrclr 阅读(207) 评论(0) 推荐(0) 编辑
摘要: 嘟嘟嘟 首先求树的直径两次bfs即可,实际上bfs就是最短路,因为树上路径是唯一的,所以用任何一种遍历方法都行(spfa和dijkstra当然也可以)。 可以证明,只要求出任意一条直径就行了,为什么呢?考虑一下,如果我们在直径上选了一段,那么最远偏心距可肯定是到直径两端的最大值,和直径外的点无关,只 阅读全文
posted @ 2018-09-10 11:03 mrclr 阅读(160) 评论(0) 推荐(0) 编辑