动态规划 02 (最大子矩阵)

来源:互联网 发布:华为数据库一体机 编辑:程序博客网 时间:2024/06/01 21:54

02 最大子矩阵

求一个n*n方阵中最大的子矩阵。

这是一个二位最大子矩阵问题,做法是将二位压缩至一维,再进行求解。

压缩过程中,从第一行往下,先依次压缩入b【】,并比较求出最大子串,直至到最后一行结束。要注意的是b【k】每次 i变化时要赋值为0.

代码如下:


#include<bits/stdc++.h>using namespace std;int main(){int n,i,j,k,max,sum;cin>>n;int a[101][101],b[101];for(i=1;i<=n;i++)for(j=1;j<=n;j++)cin>>a[i][j];max=0;for(i=1;i<=n;i++)// i行开始 {for(k=1;k<=n;k++){b[k]=0;}for(j=i;j<=n;j++)// j行结束 {for(k=1;k<=n;k++)//压入到 b【】 {b[k]+=a[j][k];}int l,maxx=0,c=0;//求 b【】最长子序列 for(l=1;l<=n;l++){if(c>0)c+=b[l];elsec=b[l];if(maxx<c)maxx=c;}if(max<maxx)max=maxx;}}cout<<max<<endl;return 0;}



0 0