回 帖 发 新 帖 刷新版面

主题:奶牛浴场的问题~~有答就加分哦

John的牛场和规划的浴场都是矩形。浴场要完全位于牛场之内,并且浴场的轮廓要与牛场的轮廓平行或者重合。浴场不能覆盖任何产奶点,但是产奶点可以位于浴场的轮廓上。 
  他当然希望浴场的面积尽可能大了,所以你的任务就是帮她计算浴场的最大面积。
INPUT
输入文件的第一行包含两个整数L和W,分别表示牛场的长和宽。文件的第二行包含一个整数n,表示产奶点的数量。以下n行每行包含两个整数x和y,表示一个产奶点的坐标。所有产奶点都位于牛场内,即:0<=x<=L,0<=y<=W。

OUTPUT
输出文件仅一行,包含一个整数S,表示浴场的最大面积。
Sample Input 
10 10
4
1 1
9 1
1 9
9 9

Sample Output 
80

Hint 
0<=n<=5000 
1<=L,W<=30000 

回复列表 (共13个回复)

沙发

TYPE arr = ARRAY[1..32, 1..32] OF BOOLEAN;
VAR
   bl, bw, x, y, i, j, l, w, k, s1, s2, max: INTEGER; f: BOOLEAN; a: arr;
BEGIN
    READLN(l, w);
    READLN(k);
    max := 1;
    FOR i:=1 TO l DO BEGIN
        FOR j:=1 TO w DO a[i, j] := TRUE;
    END;
    FOR i:=1 TO k DO BEGIN
        READLN(s1, s2); a[s1, s2] := FALSE;
    END;
    FOR bl:=1 TO l DO BEGIN
        FOR bw:=1 TO w DO BEGIN
            FOR x:=0 TO l - bl DO BEGIN
                FOR y:=0 TO w - bw DO BEGIN
                    f := TRUE;
                    FOR i:=x + 1 TO x + bl - 1 DO BEGIN
                        FOR j:=y + 1 TO y + bw - 1 DO BEGIN
                            IF NOT(a[i, j]) THEN BEGIN
                               f := FALSE;
                            END;
                        END;
                    END;
                    IF f THEN BEGIN
                       IF max < bl * bw THEN max := bl * bw;
                    END;
                END;
            END;
        END;
    END;
    WRITELN(max);
END.

板凳

楼上的大牛,先谢谢拉+20分.
不过有分析吗,貌似看起来......

3 楼


还有,注意数据规模,0<=n<=5000 ,1<=L,W<=30000 
用一个二维数组 还是 BOOLEAN 貌似.......

4 楼

还有,此题的时间限制虽长,但每个测试点也就1S,你用了6重FOR循环,这貌似....

5 楼

这a数组是存放一个位置能不能建浴场(这里有没有产奶点),能就是TRUE,不能就是FALSE。

不过你说的也对,BOOLEAN数组最多只能有65 535个元素,而你的面积最大值30 000*30 000=900 000 000了,这么大的面积数组是存不下的。

但是不用数组咋办呢?

6 楼

理所当然想到动规~~~

7 楼

楼上的大虾,先给你加分了~~~,那你能不能再讲讲~~`

8 楼

动归是肯定的!!但是你得样例是不是有问题?怎么达到80呢?顶多64 啊!!

9 楼

样例没有问题,那么多人都过了..........

10 楼


但是产奶点可以位于浴场的轮廓上
注意这句话

我来回复

您尚未登录,请登录后再回复。点此登录或注册