美文网首页
上交OJ-1002. 二哥种花生

上交OJ-1002. 二哥种花生

作者: code猪 | 来源:发表于2018-05-09 09:04 被阅读41次

1002.二哥种花生


Description

二哥在自己的后花园里种了一些花生,也快到了收获的时候了。这片花生地是一个长度为L、宽度为W的矩形,每个单位面积上花生产量都是独立的。他想知道,对于某个指定的区域大小,在这么大的矩形区域内,花生的产量最大会是多少。

Input Format

第1行有2个整数,长度L和宽度W。

第2行至第L+1行,每行有W个整数,分别表示对应的单位面积上的花生产量A( 0≤A<10 )。

第L+2行有2个整数,分别是指定的区域大小的长度a和宽度b。

Output Format

输出一个整数m,表示在指定大小的区域内,花生最大产量为m。

Sample Input

4 5
1 2 3 4 5
6 7 8 0 0
0 9 2 2 3
3 0 0 0 1
3 3

Sample Output

38

样例解释

左上角:38 = (1+2+3) + (6+7+8) + (0+9+2)

数据范围
对于30%的数据: 1≤L,W≤100;

对于100%的数据: 1≤L,W≤1000。

全部区域大小满足:1≤a≤L,1≤b≤W 。

分析

此问题为求大矩阵中固定大小子矩阵和最大值。
最简单的思路是,直接遍历求和每个子矩阵。其需要3个loop迭代,有重复计算,开销超时。
因此,需要保留中间结果。
一个子矩阵(a,b)对应右下角位置(A,B),其和为:

sum[A][B]-sum[A-a][B]-sum[A][B]+sum[a][b]

因此,在输入时就可以计算这个中间结果,并保留。
然后只需要2个loop迭代即可算出结果。

#include <stdio.h>

int main()
{
    int L,W;
    int a,b;
    int nut[1000][1000];
    int tmp;
    int i,j;
    int sum=0;
    scanf("%d%d",&L,&W);
    for(i=0;i<L;i++) {
        for(j=0;j<W;j++) {
            scanf("%d",&tmp); //输入时计算中间结果
            if(i>0 && j>0) nut[i][j]=tmp+nut[i-1][j]+nut[i][j-1]-nut[i-1][j-1];
            else if(i==0 && j>0) nut[i][j]=nut[i][j-1]+tmp;
            else if(j==0 && i>0) nut[i][j]=nut[i-1][j]+tmp;
            else nut[i][j]=tmp;
        }
    }
    scanf("%d%d",&a,&b);
    for(i=a-1; i<L; i++) {
        for(j=b-1;j<W;j++) { //两重遍历
            if(i==a-1 && j==b-1) tmp=nut[i][j];
            else if(i==a-1 && j!=b-1) tmp=nut[i][j]-nut[i][j-b];
            else if(i!=a-1 && j==b-1) tmp=nut[i][j]-nut[i-a][j];
            else tmp=nut[i][j]-nut[i-a][j]-nut[i][j-b]+nut[i-a][j-b];
            if (tmp>sum) sum=tmp;
        }
    }
    printf("%d",sum);
    return 0;
}

相关文章

  • 上交OJ-1002. 二哥种花生

    1002.二哥种花生 Description 二哥在自己的后花园里种了一些花生,也快到了收获的时候了。这片花生地是...

  • 1003.二哥养细菌

    题目描述 二哥不仅种苹果和花生,还养了很多细菌。二哥的细菌培养皿成方格形,边长为L。长期培养后,二哥发现了细菌繁殖...

  • 愿所有的婚姻都是因为爱情

    1 二哥离婚了,现在又娶了个老婆,很严厉,把二哥控制的死死的。 二哥挣得钱全部上交。不允许二哥出去胡吃海喝出门会朋...

  • 1002. 二哥种花生

    Description 二哥在自己的后花园里种了一些花生,也快到了收获的时候了。这片花生地是一个长度为L、宽度为W...

  • 朵嘉浓小米粥:她说,那段日子真的太难熬了

    来自激素皮炎患者雪姐的分享: 我在做微商之前是在云南做的鲜花生意,鲜花生意是比较特别的,就是白天休息晚上交易,后来...

  • 上交OJ-1007. 二哥领工资

    1007. 二哥领工资 题目描述 二哥当了多年的助教,今天终于要发工资了!二哥正在高兴之际,得知工资是分两部分发放...

  • 上交OJ-1008. 二哥买期货

    二哥买期货 Description 二哥想知道在一段时期内,一共有多少个交易日。期货交易日的限定如下: 周六、周日...

  • 弟兄们微信群里开心作(打油)诗

    2017年12月18日癸酉年冬月初一 二哥一年四季农忙中,农忙空闲去打工。年年轮回种土地,大姜芋头和花生。 初雪 ...

  • 打卡第三十三天

    今天星期二 阴转多云 昨天下午陪老妈一起从公园回来后 二哥买的板鸭 和花生米 都是下酒菜啊 哈哈 所以我和老妈二哥...

  • 求下联--两种解读加正反义加多音字

    上联:花生长虫,是花生虫,非花生虫,长出长长虫。 这上联,有两种读法,也是两种意思。 花生 长(zhang)虫,...

网友评论

      本文标题:上交OJ-1002. 二哥种花生

      本文链接:https://www.haomeiwen.com/subject/zttnrftx.html