最大子矩阵

                                                                                                           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
HDU 2006-12 Programming Contest

这题的时间限制竟然是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;
}

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

转载于:https://www.cnblogs.com/nyist-TC-LYQ/p/7208175.html

HUD-1559 最大子矩阵,dp模拟相关推荐

  1. 20190405 DP模拟赛1总结

    20190405 DP模拟赛1总结 概况 重要的模型&&方法:T1,T2,T3 分数 失分原因 题目及其题解 [ T1:Lg P2737 [USACO4.1]麦香牛块Beef McNu ...

  2. hdu 1559 最大子矩阵 (简单dp)

    题目:http://acm.hdu.edu.cn/showproblem.php?pid=1559 1 #include <cstring> 2 #include <cstdlib& ...

  3. hdu 1559 最大子矩阵(DP)

    题目链接:点击链接 #include<stdio.h> #include<string.h> #define max(a,b) a>b?a:b int d[1005][1 ...

  4. UVA-10074 最大子矩阵 DP

    求出大矩阵里面全为0的最大子矩阵 我自己用的个挫DP写的,感觉写的不是很好,其实可以再优化,DP想法就是以 0 0 到当前 i j 为整体矩阵考虑,当前 i j就是从 i-1 j或者 i,j-1那里最 ...

  5. POJ3107 Godfather 树形dp+模拟vector

    题意: Description Last years Chicago was full of gangster fights and strange murders. The chief of the ...

  6. Pyramid of Glasses CodeForces - 676B (dp,模拟)

    题目:新冠病毒肆虐了好几个月,彻底打乱了大家的学习和生活,终于在阳光明媚的某月,全球迎来了新冠抗战的顺利.为了庆祝全球协力共同抗疫的顺利,同学们准备了一场庆祝晚会,一起幻想以后美好的生活,他们用香槟酒 ...

  7. BZOJ 2651 城市改建 树形DP+模拟?

    题意 给一颗树,删除一条边再加一条边,使它仍为一颗树且任意两点间的距离的最大值最小. 题目数据范围描述有问题,n为1或重建不能使任意两点距离最大值变小,可以输出任意答案. 分析 删除一条边后会使它变成 ...

  8. HDU 1559 最大子矩阵

    最大子矩阵 Time Limit: 30000/10000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) Total Su ...

  9. USACO2.2【统计,dp,模拟,位运算】

    正题 T1:序言页码 PrefaceNumberingPreface NumberingPrefaceNumbering 评测记录:https://www.luogu.org/recordnew/li ...

  10. bzoj1084 [SCOI2005]最大子矩阵 dp

    首先题目是要选几个连续的矩阵,有关连续类的问题是可以最优值直接在相邻两行转移的 而且题目中m<=2是非常方便的条件,分类讨论就可以了 注: 0 0也要转移 码: #include<iost ...

最新文章

  1. LeetCode 93. Restore IP Addresses--面试算法题--Python解法
  2. 凡科虚拟服务器怎样做301,虚拟主机301重定向怎么做?网站301重定向方法之一
  3. 一切尽在掌控之中:这个Python脚本,让工作自动向你汇报进度!
  4. java飞行_运行java飞行记录器JFR(java flight recorder)
  5. Delphi窗口属性
  6. JSON.stringify()实现原理
  7. 甲骨文裁员后续:近万招聘者哄抢甲骨文前员工
  8. C#委托之个人理解(转)
  9. 【GPS】 根据GPS坐标求取两点间距离算法
  10. jsp java session_JSP Session
  11. 关于降低软件开发过程中沟通成本的思考
  12. 大三学生前端实习经验分享
  13. 原来把300页Word转成PPT,只需要一个键!别再复制粘贴了
  14. Unity 制作倒计时
  15. 大数据练习环境部署(3) - Hadoop集群部署
  16. VSPD虚拟串口工具——使用完一定要删除串口
  17. 简单10秒教你解除复制限制
  18. 来自千里之外祖国的关爱
  19. 美颜sdk磨皮与瘦脸功能代码分析
  20. 天堂在前方——与所有有梦想、有追求的人共勉

热门文章

  1. C语言——变量篇(一)变量关键字static、auto、extern、register
  2. “21天好习惯”第一期-12
  3. php打开retmsg,PHP截取发动短信内容的方法
  4. mysql丢数据无法启动mysql_mysql InnoDB数据无法启动解决办法
  5. 【Java程序设计】运算符与优先级
  6. 防止网线中的信号衰减很重要
  7. Windows Internet Explorer 7 正式发布
  8. DFS csu1719 Boggle
  9. 波形分析--DSRC 时间窗测量
  10. SQL Server 2014新特性:其他