poj 1050 最大子矩阵

Posted mltang

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了poj 1050 最大子矩阵相关的知识,希望对你有一定的参考价值。

 

a11   a12   a13   a14   a15

a21   a22   a23   a24   a25

a31   a32   a33   a34   a35

a41   a42   a43   a44   a45

a51   a52   a53   a54   a55

 

枚举矩阵每一列的区间,当成最长子串的dp方式就能过了

你把a21  a31  a41 看成一个元素,值是这三个元素的和,后面的列同理

https://www.cnblogs.com/GodA/p/5237061.html

这个人讲的非常好

#include<iostream>
#include <cstdio>
using namespace std;
const int maxn = 105;
int arr[maxn][maxn];
int sum[maxn][maxn];
int main()
{
    int n;
    scanf("%d",&n);
    for(int i = 1; i <= n; ++i )
    {
        for(int j = 1; j <= n; ++j)
        {
            scanf("%d",&arr[i][j]);
        }
    }
    for(int i = 1; i <= n; ++i)
    {
        for(int j = 1; j <= n; ++j)
        {
            sum[i][j] = sum[i][j-1] + arr[j][i];
        }
    }
    /*for(int i = 1; i <= n; ++i)
    {
        for(int j = 1; j <= n; ++j)
        {
            printf("%d
",sum[i][j]);
        }
    }*/
    int maix = 0;
    for(int i = 1; i <= n; ++i)
    {
        for(int j = i+1; j <= n; ++j)
        {
            int b = 0;
            for(int k = 1; k <= n; ++k )
            {
                if(b > 0)
                {
                    b += sum[k][j] - sum[k][i];
                }
                else
                {
                    b = sum[k][j] - sum[k][i];
                }
                if(b > maix)
                    maix = b;
            }
        }
    }
    printf("%d
",maix);
}

 

以上是关于poj 1050 最大子矩阵的主要内容,如果未能解决你的问题,请参考以下文章

POJ_1050_最大子矩阵

最大子矩阵,最大连续子数组进阶,动态规划初级,poj1050

poj1050查找最大子矩阵和

POJ1050 To the Max - 贪心[最大子矩阵和]

poj1050(最大子矩阵和)

[POJ1050]To the Max(最大子矩阵,DP)