poj1050(最大子矩阵和)
Posted lmjer
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了poj1050(最大子矩阵和)相关的知识,希望对你有一定的参考价值。
设a[i][j]表示将矩阵压缩成线性序列的前缀和
那么我们在做dp时枚举起点 i 与终点j
最内层枚举行号,那么可以一行一行的累加,
最后更新答案即可
#include<cstdio> #include<algorithm> using namespace std; const int nil=-(1<<29); const int maxn=100; int sum[maxn][maxn]; int main(){ int n; scanf("%d",&n); int p; for (int i=1;i<=n;i++){ for (int j=1;j<=n;j++){ scanf("%d",&p); sum[i][j]=sum[i][j-1]+p; } } int ans=nil; for (int i=1;i<=n;i++){ for (int j=i;j<=n;j++){ int num=0; for (int k=1;k<=n;k++){ if(num<0) num=0; num+=sum[k][j]-sum[k][i-1]; ans=max(ans,num); } } } printf("%d\\n",ans); return 0; }
以上是关于poj1050(最大子矩阵和)的主要内容,如果未能解决你的问题,请参考以下文章
POJ1050 To the Max - 贪心[最大子矩阵和]