最大子矩阵(限制矩阵的大小)
2015-06-13 18:23
337 查看
最大子矩阵
Time Limit: 30000/10000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Total Submission(s): 3424 Accepted Submission(s): 1735
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
这是一个最大子矩阵问题,这是一个好问题!
#include<cstdio> #include<iostream> #include<cstring> #include<algorithm> #include<string> using namespace std; int a[1005][1005]; int main() { int t,n,m,x,y,i,j,maxs,ans; cin>>t; while(t--) { maxs=0; cin>>n>>m>>x>>y; for(i=1;i<=n;i++) { for(j=1;j<=m;j++) { cin>>a[i][j]; a[i][j]=a[i][j]+a[i-1][j]+a[i][j-1]-a[i-1][j-1];//算出(1,1)至(i,j)的矩阵的值 } } /* for(i=1;i<=n;i++) { for(j=1;j<=m;j++) { cout<<a[i][j]<<" "; } cout<<endl; }*/ for(i=x;i<=n;i++) { for(j=y;j<=m;j++) { ans=a[i][j]-a[i-x][j]-a[i][j-y]+a[i-x][j-y];//比较,画图就理解了! maxs = max(ans, maxs); } } cout<<maxs<<endl; } }
相关文章推荐
- Form builder开发一些技巧
- 使用CocoaPods管理依赖库
- oracle11g系列 事物和常用数据库对象
- Struts1表单校验
- 对Web作用域变量进行迭代
- CSS——display
- zend framework2 - 通过配置类加载提高性能
- LruCache的终极解析
- RDIFramework.NET — 基于.NET的快速信息化系统开发框架 — 系列目录
- Spring.net 在aps.net Web的配置复习
- spring中事务管理的几种方式
- [Android基础]theme、style、attr之间联系与区别
- 在eclipse中导入spring源码
- JavaScript页面跳转
- [转] 美股熊市还远未开启
- 不可深究啊,
- 精益求精——《我与学院的点点滴滴》征文作品
- 学习七十一雾央MFC游戏心得,初体验(一)
- RDIFramework.NET ━ .NET快速信息化系统开发框架钜献 V2.9 版本震撼发布
- Struts1之编码问题