题目链接:HDU1559
求最大子矩阵,其实挺简单的,我觉得直接看代码也能看懂这个意思。
#include<cstdio>
#include<cstring>
#include<iostream>
#include<algorithm>
#include<queue>
#include<stack>
#include<vector>
#include<cmath>
#include<map>
#include<set>
#include<cstdlib>
#define mem(a,b) memset(a,b,sizeof(a))
typedef long long ll;
using namespace std;
const int maxn = 1e3+10;
int x,y,m,n;
int dp[maxn][maxn];
int main(){
int T,ans;
scanf("%d",&T);
while(T--){
mem(dp,0);
ans = 0;
scanf("%d%d%d%d",&x,&y,&m,&n);
for(int i = 1 ; i <= x; i++){
for(int j = 1 ; j <= y; j++){
scanf("%d",&dp[i][j]);
dp[i][j] += (dp[i-1][j] + dp[i][j-1] - dp[i-1][j-1]);
if(i >= m && j >= n){
ans = max(ans,dp[i][j]-dp[i][j-n]-dp[i-m][j]+dp[i-m][j-n]);
}
}
}
printf("%d\n",ans);
}
return 0;
}