题解

52 条题解

  • 0
    @ 2009-08-07 22:48:39

    用A表示棋盘

    对于正方形,可以类似于盖房子的模型

    F=Min(F,F,F)+1

    条件为 (Not(A Xor A))And(A Xor A)And(A Xor A)

    即满足黑白相间的要求

    对于矩形,可以利用极大化思想

    F=H[J]*(R[J]-L[J]+1)

    其中H[J]表示A向上最多可以延伸的高度,L[J],R[J]表示向左、右可以延伸的宽度

    求L的代码如下

    L[1]:=1;

    For J:=2 to M do

    Begin

    L[J]:=J;

    While(L[J]>1)And(H[J]

  • 0
    @ 2009-07-31 12:12:07

    用悬线法的可以不开2000*2000的数组

    开2000*1的就可以了

    一行行地dp

  • 0
    @ 2009-05-27 22:32:34

    现将原矩阵转换成一个新的矩阵,对于每一对(i,j),当i>1且j>1时判断(i,j)和(i-1,j)(i,j-1)(i-1,j-1)是否相见,如果是,在新矩阵的(i-1,j-1)位置填充一个1,否则是0。

    然后问题就变成了在新矩阵中找一个长宽为(x,y)的全是1的矩形(正方形),使(x+1)*(y+1)最大。

    对于正方形,可以用一个DP解决。

    对于矩形:参见WC2003王知昆的论文,使用极大化思想解决。

    至此,时间复杂度为O(mn),空间复杂度为O(mn),但是常数有点大了……因此:

    ├ 测试数据 01:答案正确... 0ms

    ├ 测试数据 02:答案正确... 0ms

    ├ 测试数据 03:答案正确... 0ms

    ├ 测试数据 04:答案正确... 0ms

    ├ 测试数据 05:答案正确... 0ms

    ├ 测试数据 06:答案正确... 41ms

    ├ 测试数据 07:答案正确... 244ms

    ├ 测试数据 08:答案正确... 181ms

    ├ 测试数据 09:答案正确... 494ms

    ├ 测试数据 10:答案正确... 462ms

  • 0
    @ 2009-04-03 18:04:36

    伟大悬线法1秒全关

  • 0
    @ 2009-03-21 21:11:37

    最大正方形:

    int[2000][2000] C++ 开不了

    我发现总是只有n+m-1个保存的数据在接下来的递推中要用

    且每('\'方向的)斜线上恰有一个

    我只开int[4000]

    其中f[i]表示第i条('\'方向的)斜线上的要用数据

    最大矩形:

    分治法

    把一个矩形割成两个递归,然后处理横跨分割线的子矩形

  • 0
    @ 2009-02-17 19:36:43

    编译通过...

    ├ 测试数据 01:答案正确... 0ms

    ├ 测试数据 02:答案正确... 0ms

    ├ 测试数据 03:答案正确... 0ms

    ├ 测试数据 04:答案正确... 0ms

    ├ 测试数据 05:答案正确... 0ms

    ├ 测试数据 06:答案正确... 478ms

    ├ 测试数据 07:答案正确... 900ms

    ├ 测试数据 08:答案正确... 1744ms

    ├ 测试数据 09:答案正确... 5244ms

    ├ 测试数据 10:答案正确... 681ms

    ---|---|---|---|---|---|---|---|-

    Accepted 有效得分:100 有效耗时:9047ms

    很无耻的过了。。

  • 0
    @ 2009-02-10 18:15:06

    时间好差!

    Accepted 有效得分:100 有效耗时:2047ms

  • 0
    @ 2008-10-29 17:47:33

    编译通过...

    ├ 测试数据 01:答案正确... 0ms

    ├ 测试数据 02:答案正确... 0ms

    ├ 测试数据 03:答案正确... 0ms

    ├ 测试数据 04:答案正确... 0ms

    ├ 测试数据 05:答案正确... 0ms

    ├ 测试数据 06:答案错误...

     ├ Hint: 恩,900*1200

     ├ 标准行输出

     ├ 错误行输出

    ├ 测试数据 07:答案正确... 447ms

    ├ 测试数据 08:答案正确... 338ms

    ├ 测试数据 09:答案错误...

     ├ Hint: 超越极限的2000*2000

     ├ 标准行输出

     ├ 错误行输出

    ├ 测试数据 10:答案正确... 759ms

    ---|---|---|---|---|---|---|---|-

    Unaccepted 有效得分:80 有效耗时:1544ms

    ...09和06死活过不去...拼了...

  • 0
    @ 2008-10-01 13:58:59

    编译通过...

    ├ 测试数据 01:答案正确... 0ms

    ├ 测试数据 02:答案正确... 0ms

    ├ 测试数据 03:答案正确... 0ms

    ├ 测试数据 04:答案正确... 0ms

    ├ 测试数据 05:答案正确... 0ms

    ├ 测试数据 06:答案正确... 181ms

    ├ 测试数据 07:答案正确... 697ms

    ├ 测试数据 08:答案正确... 541ms

    ├ 测试数据 09:答案正确... 1166ms

    ├ 测试数据 10:答案正确... 1228ms

    ---|---|---|---|---|---|---|---|-

    Accepted 有效得分:100 有效耗时:3813ms

    先预处理,搞好每个点往上,往左,往右能走的最长位置。再一列一列做,记下在每个点最往上延伸的前提下,往左走的最远距离和往右走的最远距离,更新答案就可以了。

  • 0
    @ 2008-09-12 15:14:45

    真是太奇怪了,为什么同样是2000*2000的longint类型,我前6个点就AC,后面就超内存。。。。。。。。。。。。。。。。。

  • 0
    @ 2008-08-26 20:16:48

    超时的同志注意啦,数据类型要开整形,不要长整形,否则后4组都会TEL,

    剩下的就是细节了!!!!!

    加油啊!!!!!!!

  • 0
    @ 2008-07-12 22:36:48

    P1055

  • 0
    @ 2007-11-30 19:31:35

    我将15%

    to 16%

  • 0
    @ 2007-11-06 22:53:32

    哎……

    还真是不公平啊……

    c里面根本就没有boolean那么小的数据类型……

  • 0
    @ 2007-11-03 15:04:08

    第一问很菜。第二问类似usaco6.几里面一道题。。。

  • 0
    @ 2007-10-27 11:34:08

    转化为最大子矩形的问题

    最大子矩形问题:

    在一个给定的矩形中有一些障碍点,要找出内部不包含任何障碍点的,轮廓与整个矩形平行或重合的最大子矩形。

  • 0
    @ 2007-10-26 12:56:37

    怎么没人写个详细的题解?

    我想了几天了都没得到正解,麻烦哪位大牛写写

    遂了我的心愿

  • 0
    @ 2007-10-25 21:48:57

    楼上的,这还算慢?!果然是大牛...

    我用极大化也只能这样了,请教下优化方案~~~

  • 0
    @ 2007-10-12 20:18:11

    记录在达到最大高度时,能向左右扩展的长度...

  • 0
    @ 2007-10-10 19:26:49

    大化思想解决最大子矩形问题

信息

ID
1351
难度
7
分类
动态规划 | 单调性DP数据结构 | 点击显示
标签
(无)
递交数
1046
已通过
236
通过率
23%
被复制
6
上传者