最大子矩阵

                                                                                                           Time Limit: 30000/10000
MS (Java/Others) 

                                                                                                          Memory Limit: 32768/32768
K (Java/Others)

Problem Description
给你一个m×n的整数矩阵,在上面找一个x×y的子矩阵,使子矩阵中所有元素的和最大。
 
Input
输入数据的第一行为一个正整数T,表示有T组测试数据。每一组测试数据的第一行为四个正整数m,n,x,y(0<m,n<1000 AND 0<x<=m AND 0<y<=n),表示给定的矩形有m行n列。接下来这个矩阵,有m行,每行有n个不大于1000的正整数。
 
Output
对于每组数据,输出一个整数,表示子矩阵的最大和。
 
Sample Input
1
4 5 2 2
3 361 649 676 588
992 762 156 993 169
662 34 638 89 543
525 165 254 809 280
 
Sample Output
2474
 
Author
lwg
 
Source

这题的时间限制竟然是10s,有点不科学,贡献了一发WA,是怪样例水还是怪自己没考虑全呢?

题意很简单:找一个x*y的和最大的子矩阵。

貌似没什么思路,其实这题和我们做的连续最大和很类似,只不过这里拓展成二维的了。连续最大和问题我们可以采用前缀和累加法,然后枚举所有区间即可(数据较小的前提),也可以设置一个变量表示当前最大,然后一直比较。此题就可以采用前缀和法,用sum[i][j]表示从1 1到i j这个矩形所有数的和,然后再找找规律就好了,但千万要注意的是求sun[i][j]时减去重复的。具体请看代码:

const int N=1e3+10;
int n,m,x,y,a[N][N],sum[N][N];
int get_ans()
{
int ans=0;
for(int i=x; i<=n; i++)
for(int j=y; j<=m; j++)
{
int ma=sum[i][j]-sum[i-x][j]-sum[i][j-y]+sum[i-x][j-y];
ans=max(ans,ma);
}
return ans;
}
int main()
{
int t;
scanf("%d",&t);
while(t--)
{
scanf("%d%d%d%d",&n,&m,&x,&y);
memset(sum,0,sizeof(sum));
for(int i=1; i<=n; i++)
for(int j=1; j<=m; j++)
{
scanf("%d",&a[i][j]);
sum[i][j]=sum[i-1][j]+sum[i][j-1]-sum[i-1][j-1]+a[i][j];
}
int ans=get_ans();
printf("%d\n",ans);
}
return 0;
}

挺好的一个题,不是很难。

最新文章

  1. SQL server2008-对象资源管理器
  2. JS中 计算器的简单制作
  3. StgCreateDocfileOnILockBytes复合文档
  4. GDC2016 Epic Games【Bullet Train】 新风格的VR-FPS的制作方法
  5. HttpWebRequest访问时,错误:(401)未经授权。
  6. FPGA统计摄像头输出-基于MD9T112
  7. XtraForm中更换皮肤
  8. Android开发中在一个Activity中关闭另一个Activity
  9. Android 五大布局(LinearLayout、FrameLayout、AbsoulteLayout、RelativeLayout、TableLayout )
  10. Shortest Prefixes(trie树唯一标识)
  11. CSS定位:几种类型的position定位的元素
  12. java 读取excel 正常 xls
  13. MySql绿色版安装过程记录
  14. JAVA中一些需要记录的知识点(进阶部分)&#183;&#183;&#183;持续更新
  15. URL的编码和解码
  16. swoole websocket服务推送
  17. Python学习—数据库篇之SQL补充
  18. 看不懂霍尔效应的直接看视频https://www.bilibili.com/video/av11446173/
  19. springboot 中事件监听模型的一种实现
  20. Android避免OOM(内存优化)

热门文章

  1. python_函数进阶(5)
  2. ubuntu server 14.04LTS升级Python3.5
  3. PHP连接数据操作步骤
  4. leetcode410 Split Array Largest Sum
  5. CocosCreator工程内的命名
  6. (一)VMware Harbor 简介
  7. Metinfo 5.3.19管理员密码重置漏洞复现
  8. Hbase数据库简介
  9. python基础:函数传参、全局变量、局部变量、内置函数、匿名函数、递归、os模块、time模块
  10. ImportError: pycurl: libcurl link-time ssl backend (nss) is different