二维前缀和求矩阵最大值
轰炸区最优选取
http://www.nowcoder.com/questionTerminal/4315a64464f640c38e0500dc0d6bd982
此题相当于求二维前缀和,然后得到最大的要求子矩阵和。可能我DFS太弱了吧,就想到了这个方法;
#include<bits/stdc++.h>
using namespace std;
int d[55][55];
int main(){
int n,k;
while(scanf("%d%d",&n,&k)!=EOF){
for(int i = 1;i<=n;i++){
for(int j = 1;j<=n;j++){
scanf("%d",&d[i][j]);
d[i][j] = d[i][j]+d[i-1][j]+d[i][j-1]-d[i-1][j-1];
}
}
int maxn = 0;
for(int i = k;i<=n;i++){
for(int j = k;j<=n;j++){
maxn = max(maxn,d[i][j]-d[i][j-k]-d[i-k][j]+d[i-k][j-k]);
}
}
printf("%d\n",maxn);
}
return 0;
}