最大子矩阵
点击打开链接-
总时间限制:
- 3000ms 单个测试点时间限制:
- 1000ms 内存限制:
- 65536kB
-
描述
-
已知矩阵的大小定义为矩阵中所有元素的和。给定一个矩阵,求最大非空子矩阵。
例如:
0 -2 -7 0
9 2 -6 2
-4 1 -4 1
-1 8 0 -2
最大子矩阵是:
9 2
-4 1
-1 8
输入
-
两行:
第一行n
然后n行,每行n个数,
代表一个 n*n的矩阵。
输出
- 最大子矩阵 样例输入
-
4 0 -2 -7 0 9 2 -6 2 -4 1 -4 1 -1 8 0 -2
样例输出
-
15
提示
- 贪心法 源码
-
#include<cstdio> #include<cstring> #include<iostream> using namespace std; int a[5005][5005]; int ming(int b[100005],int n) { int ans=b[1]; int max=ans; for(int i=2;i<=n;i++) { if(b[i]+ans>b[i]) ans+=b[i]; else ans=b[i]; if(max<ans) max=ans; } return max; }//判断子矩阵的大小 int main() { int n; cin>>n; int max=(int)1e-10,t; for(int i=1;i<=n;i++) for(int j=1;j<=n;j++) cin>>a[i][j];//输入 for(int i=1;i<=n;i++) { int sum[100005]={}; for(int j=i;j<=n;j++) { int k; for(k=1;k<=n;k++) sum[k]+=a[j][k]; t=ming(sum,k); //传入子矩阵 if(t>max) max=t; //如果大就交换 } } cout<<max<<endl; }
-
谢谢观赏