一、枚举算法
1、枚举的概念
枚举就是根据提出的问题,列出该问题所有可能的解,并在逐一列出的过程中,检验每个可能的解是否是问题真正的解,如果是就采纳这个解,如果不是就判断下一个。
2、枚举的题目特点
解枚举的范围是有穷的,检验条件是确定的。
3、问题描述
给定一个n*m的矩阵,求A中的一个非空子矩阵,使这个子矩阵中元素和最大,其中,A的子矩阵指在A中行和列均连续的一部分。
4、代码实现
#include<iostream>
using namespace std;
int main(){
int n,m,ans;
cin>>n>>m;
ans=-1005;
for(int i=0;i<n;i++){
for(int j=0;j<mlj++){
cin>>A[i][j];
}
}
for(int i=0;i<n;i++){
for(int j=i;j<n;j++){
for(int k=0;k<m;k++){
for(int l=k;l<m;l++){
int tmp=0;
for(int p=i;p<=j;p++){
for(int q=k;q<=l;q++){
tmp +=A[p][q]
}
}
if(tmp>ans){
ans=tmp;
}
}
}
}
}
cout<<ans<<endl;
}