方格

洛谷 P2701 [USACO5.3]巨大的牛棚Big Barn

这一生的挚爱 提交于 2019-11-29 02:21:44
洛谷 P2701 [USACO5.3]巨大的牛棚Big Barn Description 农夫约翰想要在他的正方形农场上建造一座正方形大牛棚。他讨厌在他的农场中砍树,想找一个能够让他在空旷无树的地方修建牛棚的地方。我们假定,他的农场划分成 N x N 的方格。输入数据中包括有树的方格的列表。你的任务是计算并输出,在他的农场中,不需要砍树却能够修建的最大正方形牛棚。牛棚的边必须和水平轴或者垂直轴平行。 EXAMPLE 考虑下面的方格,它表示农夫约翰的农场,‘.'表示没有树的方格,‘#'表示有树的方格 1 2 3 4 5 6 7 8 1 . . . . . . . . 2 . # . . . # . . 3 . . . . . . . . 4 . . . . . . . . 5 . . . . . . . . 6 . . # . . . . . 7 . . . . . . . . 8 . . . . . . . . 最大的牛棚是 5 x 5 的,可以建造在方格右下角的两个位置其中一个。 Input Line 1: 两个整数: N (1 <= N <= 1000),农场的大小,和 T (1 <= T <= 10,000)有树的方格的数量 Lines 2..T+1: 两个整数(1 <= 整数 <= N), 有树格子的横纵坐标 Output 只由一行组成,约翰的牛棚的最大边长。 Sample

专题——四维DP

送分小仙女□ 提交于 2019-11-28 00:50:36
因为在做题的时候常常做不出来,一看题解大呼“竟然有四维”,所以我决定整理一下四维DP的问题。 T1 P1004 方格取数 题目描述 设有N×N的方格图(N≤9),我们将其中的某些方格中填入正整数,而其他的方格中则放入数字0。如下图所示(见样例): A 0 0 0 0 0 0 0 0 0 0 13 0 0 6 0 0 0 0 0 0 7 0 0 0 0 0 0 14 0 0 0 0 0 21 0 0 0 4 0 0 0 0 15 0 0 0 0 0 0 14 0 0 0 0 0 0 0 0 0 0 0 0 0 0 B 某人从图的左上角的A点出发,可以向下行走,也可以向右走,直到到达右下角的B点。在走过的路上,他可以取走方格中的数(取走后的方格中将变为数字0)。 此人从A点到B点共走两次,试找出2条这样的路径,使得取得的数之和为最大。 输入格式 输入的第一行为一个整数NN(表示N \times NN×N的方格图),接下来的每行有三个整数,前两个表示位置,第三个数为该位置上所放的数。一行单独的00表示输入结束。 输出格式 只需输出一个整数,表示22条路径上取得的最大的和。 解法 其实如果只走一条路径完全可以直接二维dp出来。但是这题有一个特殊的地方, 那就是取走的地方会变为0.这就不允许我们分别DP。在这种情况下,我们要参考数据范围,然后发现,可以设f[i][j][p][q

「APIO2011」方格染色 加权并差集

一个人想着一个人 提交于 2019-11-27 12:13:39
「APIO2011」方格染色 正文: 对于一张图的状态,如果我们存这张图的每一个点。那么空间复杂度是 O ( n 2 ) O(n^2) O ( n 2 ) ,肯定不行,更不用说时间了。 不断的画图可以发现,如果我们知道了第一行,再知道第二行第一个,我们就可以推出第二行,之后如果知道第三行第一个,就可以推出第三行……也就是我们只要知道一张图的第一列和第一行,就可以知道整张图的状态。 然后我们考虑怎么把 m p [ i ] [ j ] mp[i][j] m p [ i ] [ j ] 的限制推到第一行和第一列上。 m p [ 1 ] [ 1 ] x o r m p [ 1 ] [ j ] x o r m p [ i ] [ 1 ] x o r m p [ i ] [ j ] = ( i m o d 2 = = 0 a n d j m o d 2 = = 0 ) mp[1][1]\ xor\ mp[1][j]\ xor\ mp[i][1]\ xor\ mp[i][j]=(i\ mod\ 2==0\ and\ j\ mod\ 2==0) m p [ 1 ] [ 1 ] x o r m p [ 1 ] [ j ] x o r m p [ i ] [ 1 ] x o r m p [ i ] [ j ] = ( i m o d 2 = = 0 a n d j m o d 2 = = 0 ) 解释

[LuoGu] P1004 方格取数

旧时模样 提交于 2019-11-26 17:47:04
\(\color{red}{\mathcal{Description}}\) 设有 \(N \times N\) 的方格图,我们在其中的某些方格中填入正整数,而其它的方格中则放入数字 \(0\) 。如下图所示: 某人从图中的左上角 \(A\) 出发,可以向下行走,也可以向右行走,直到到达右下角的 \(B\) 点。在走过的路上,他可以取走方格中的数(取走后的方格中将变为数字 \(0\) )。 此人从 \(A\) 点到 \(B\) 点共走了两次,试找出两条这样的路径,使得取得的数字和为最大。 \(\color{red}{\mathcal{Input\ Format}}\) 输入的第一行为一个整数 \(N\) (表示 \(N \times N\) 的方格图),接下来的每行有三个整数,前两个表示位置,第三个数为该位置上所放的数。一行单独的 \(0\) 表示输入结束。 \(\color{red}{\mathcal{Output\ Format}}\) 只需输出一个整数,表示 \(2\) 条路径上取得的最大的和。 \(\color{red}{\mathcal{DataSize\ Agreement}}\) \(1 \leq N \leq 9\) \(\color{red}{\mathcal{Solution}}\) 来源: https://www.cnblogs.com/1miharu/p