题目大意:矩阵的大小定义为矩阵中所有元素的和,求一个子矩阵,其大小最大
很巧妙的一道题!尤其需要注意子函数中求max的部分!!
#include<iostream> #include<string.h> using namespace std; int n; int maxsub(int * a) { /*m只是代表到a[i]为止的最大序列和 假如数组为 5,-1,1,2,1 则m为4而结果应为5!! */ int i; int m=a[0],ans=a[0]; for (i=1;i<n;i++) { m=max(m+a[i],a[i]); ans=max(m,ans);//!!!总是忘记加这一句话! } return ans; } int main() { int i,j,k; int g[101][101]; cin>>n; for (i=0;i<n;i++) for (j=0;j<n;j++) cin>>g[i][j]; int ans=g[0][0]; int b[101]; for (i=0;i<n;i++)//以第i列为起点 { memset(b,0,sizeof(b)); for (j=i;j<n;j++)//合并第i到j列 { for (k=0;k<n;k++)//每次加一列,随着j递加加进来更多列 b[k]+=g[k][j]; ans=max(maxsub(b),ans); } } cout<<ans; return 0; }