【weJudge】1106. [ACM][2014新生赛重现][现场]Gundam Unicorn

你上有一门威力巨大的光束炮,然而它现在剩下的能量只能再发射一次。为了使敌人受到更大的损失,你必须谨慎地使用这仅剩的一次机会。

敌军队形和光束炮的覆盖范围均为矩形(矩形不可旋转)

输入要求

输入数据有多组,每组第一行是两个整数nm1 <= n, m <= 30),表示敌军队形的宽和高;接下来的m行,每行有n个整数ai1<=ai<=100),每个整数表示敌军每个机动战士的价值;接着一行是两个整数wh1 <= w, h <= 30),表示你的光束炮的覆盖覆盖范围的宽和高。输入以EOF结束。

输出要求

对于多组输入数据,每组输出一行,每行一个整数,表示敌军可能受到的最大损失。

测试数据

输入示例

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

输出示例

28
6

小贴士

声明:本套题目由ACM协会内一腐宅命题,其中可能出现奇怪的模型与题目设定,相关设定不代表协会观点与立场。

题目来源

2014BNUZ-ACM新生赛现场赛原题命题:北京师范大学珠海分校ACM协会陈思佳

1.  #include<stdio.h>  

2.  int main() {  

3.      int a[100][100];  

4.      int m, n, w, h, i, j, k, g;  

5.      long long max, sum;  

6.      while(~scanf("%d%d", &n, &m)) {  

7.          memset(a,0,sizeof(a));  

8.          max = -1e9;  

9.          for(i = 0; i < m; i++) {  

10.             for(j = 0; j < n; j++) {  

11.                 scanf("%d", &a[i][j]);  

12.             }  

13.         }  

14.         scanf("%d%d", &w, &h);//输入数据  

15.         sum = 0;  

16.         if(w >= n && h >= m) {//如果你的炮特牛萌,能覆盖所有敌人、  

17.             for(i = 0; i < m; i++) {  

18.                 for(j = 0; j < n; j++) {  

19.                     sum += a[i][j];  

20.                 }  

21.             }  

22.             printf("%d\n", sum);  

23.             continue;  

24.         }  

25.         //否则,暴力解吧,这是我渣渣的解法,居然也能过。  

26.         sum = 0;  

27.         for(k = 0; k < m ; k++) {  

28.             for(g = 0; g < n ; g++) {  

29.                 for(i = k; i < h + k; i++) {  

30.                     for(j = g; j < w + g; j++) {  

31.                         sum += a[i][j];  

32.                     }  

33.                 }  

34.                 if(sum > max) {  

35.                     max = sum;  

36.                 }  

37.                 sum = 0;  

38.             }  

39.         }  

40.         printf("%d\n", max);  

41.     }  

42. }  

 希望有更棒的解法,求轻喷。。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值