描述:给定一个矩阵,找到一个子矩阵,使得子矩阵中所有元素之和最大。
思路:暴力循环。从1*1矩阵一直到n*n矩阵,依次计算,比较得到最大值。输入输出用文件读写方式。
#include<bits/stdc++.h>
using namespace std;
int main(){
int q[100][100];
ifstream in("in.txt");
int n;
in>>n;
for(int i=0;i<n;i++){
for(int j=0;j<n;j++){
in>>q[i][j];
}
}
ofstream out("out.txt");
int k=1,max=-32767;
while(k<=n){
for(int i=0;i<=n-k;i++){
for(int j=0;j<=n-k;j++){
int sum=0;
for(int a=i;a<i+k;a++){
for(int b=j;b<j+k;b++){
sum+=q[a][b];
}
}
if(sum>max) max=sum;
}
}
k++;
}
out<<max<<endl;
return 0;
}
注意:子矩阵可以是原矩阵,所以while循环中,k<=n