hdoj.1559 最大子矩阵 20140813
2014-08-13 11:06
447 查看
最大子矩阵
Time Limit: 30000/10000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Total Submission(s): 2882 Accepted Submission(s): 1445
[align=left]Problem Description[/align]
给你一个m×n的整数矩阵,在上面找一个x×y的子矩阵,使子矩阵中所有元素的和最大。
[align=left]Input[/align]
输入数据的第一行为一个正整数T,表示有T组测试数据。每一组测试数据的第一行为四个正整数m,n,x,y(0<m,n<1000 AND 0<x<=m AND 0<y<=n),表示给定的矩形有m行n列。接下来这个矩阵,有m行,每行有n个不大于1000的正整数。
[align=left]Output[/align]
对于每组数据,输出一个整数,表示子矩阵的最大和。
[align=left]Sample Input[/align]
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
[align=left]Sample Output[/align]
2474 [code]#include<stdio.h> #include<string.h> int p[1010][1010]; int s[1010][1010]; int main() { int T,n,m,x,y,i,j,k,sum; scanf("%d",&T); while(T--) { memset(s,0,sizeof(s)); scanf("%d%d%d%d",&m,&n,&x,&y); for(i=0;i<m;i++) { k=0; for(j=0;j<n;j++) { scanf("%d",&p[i][j]); if(j<=y-1) s[i][k]+=p[i][j]; else s[i][++k]=s[i][k-1]-p[i][j-y]+p[i][j]; } } memset(p,0,sizeof(p)); sum=0; for(j=0;j<=m-y;j++) { k=0; for(i=0;i<m;i++) { if(i<=x-1) p[k][j]+=s[i][j]; else p[++k][j]=p[k-1][j]-s[i-x][j]+s[i][j]; if(sum<p[k][j]) sum=p[k][j]; } } printf("%d\n",sum); } return 0; }
[/code]
相关文章推荐
- hdoj 1559 最大子矩阵 【矩阵压缩 DP】
- hdoj 1559 最大子矩阵 [dp]
- HDU 1559 最大子矩阵【最大子矩阵】
- HDOJ1559最大子阵
- HDU 1559 最大子矩阵--dp--(最大和子矩阵模型)
- HDU-1559-最大子矩阵【DP】
- HDU 1559 最大子矩阵 解题报告
- hdoj 1559 最大子矩阵
- HUD-1559 最大子矩阵,dp模拟
- 最大子矩阵和(HD 1559,DP,给定子矩阵行列,O(n^2))
- hdoj 4307 Matrix 【最大流 求解矩阵乘最值】【经典构图!】
- hdu 1559最大子矩阵
- HDU 1559最大矩阵和
- HDOJ-----1559最大子矩阵
- HDOJ4328-最大子矩阵,悬线法
- HDOJ 题目1559 最大子矩阵(dp)
- 最大子矩阵 hdu 1559
- 暑期dp46道(39)--HDOJ 2870 最大子矩阵面积...
- hdu 1559 最大子矩阵 枚举
- HDOJ 1559 最大子矩阵