最大子矩阵(板子--O(n^2))
2019-08-13 16:26
93 查看
版权声明:本文为博主原创文章,遵循 CC 4.0 by-sa 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/qq_40534166/article/details/99445669
hdu1081最大子矩阵(板子------O(n^3))
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1081
AC代码:
#include<iostream> #include<algorithm> #include<cstdio> #include<cstring> #include<string> #include<stack> #include<map> #include<queue> #include<set> #include<cmath> #include<cstdlib> //#include<bits/stdc++.h> using namespace std; #define scan(n) scanf("%d",&n) #define scand(n) scanf("%lf",&n) #define ll long long int b[110][110]; int sum[110][110];//预处理子矩阵关于列的前缀和 int a[110]; int main() { int n,i,j,k; while(scan(n)!=EOF) { int flag=0; int maxnum=-99999999; for(i=1;i<=n;i++) for(j=1;j<=n;j++) { scan(b[i][j]); if(b[i][j]>0) flag=1; } if(!flag) { for(i=1;i<=n;i++) for(j=1;j<=n;j++) if(b[i][j]>maxnum) maxnum=b[i][j]; cout<<maxnum<<endl; continue; } memset(sum,0,sizeof(sum)); for(i=1;i<=n;i++) sum[1][i]=b[1][i]; for(i=2;i<=n;i++) { for(j=1;j<=n;j++) sum[i][j]=b[i][j]+sum[i-1][j]; } for(k=1;k<=n;k++)//选择初行 { for(j=k;j<=n;j++)//选择末行 { for(i=1;i<=n;i++) a[i]=sum[j][i]-sum[k-1][i]; int nowsum=0; for(i=1;i<=n;i++) { nowsum+=a[i]; if(nowsum>maxnum) maxnum=nowsum; if(nowsum<0) nowsum=0; } } } cout<<maxnum<<endl; } return 0; }
相关文章推荐
- 最大子矩阵
- HDU - 1081 To The Max ( 最大子矩阵)
- BZOJ 1084 最大子矩阵
- 最大子矩阵(poj1050)
- HDU 1559 最大子矩阵
- UvaLA 3029 最大子矩阵问题
- 最大子矩阵
- HDU - 1506 Largest Rectangle in a Histogram(最大子矩阵)
- 最大子矩阵
- pku1050 最大子矩阵问题
- 动态规划练习——最大子矩阵
- hdu1081(最大子矩阵)
- 51nod 1051 最大子矩阵和 dp
- [51nod 1051 最大子矩阵和]前缀和+dp
- hdu 1081、poj1050 To The Max 最大子矩阵和
- 1051 最大子矩阵和
- Ural-1146Maximum Sum-最大子矩阵
- poj 1050 To the Max_dp求最大子矩阵和
- [DP] bzoj1084: [SCOI2005]最大子矩阵
- HDU 1559 最大子矩阵