POJ1050【DP】

题意:
求一个最大子矩阵和。
思路:
枚举行区间,然后求一个最大子序列和。
贴一发挫code…

#include <iostream>
#include <cstdio>
#include <string.h>
#include <algorithm>
using namespace std;
typedef __int64 LL;

const int N=1e2+10;

int a[N][N];
int dp[N];

int main()
{
    int n;
    scanf("%d",&n);
    for(int i=1;i<=n;i++)
        for(int j=1;j<=n;j++)
        scanf("%d",&a[i][j]);
    int ans;
    ans=a[1][1];
    for(int k=1;k<=n;k++)
    {
        for(int i=k;i<=n;i++)
        {
            for(int j=1;j<=n;j++)
            {
                if(i==k)
                    dp[j]=a[i][j];
                else
                    dp[j]+=a[i][j];
            }
            int tmax=0;
            for(int j=1;j<=n;j++)
            {
                if(tmax>0)
                    tmax+=dp[j];
                else
                    tmax=dp[j];
                if(tmax>ans)
                    ans=tmax;
            }
        }
    }
    printf("%d\n",ans);
    return 0;
}
/*
4
0 -2 -7 0
9 2 -6 2
-4 1 -4 1
-1 8 0 -2
*/
posted @ 2016-08-10 14:35  see_you_later  阅读(88)  评论(0编辑  收藏  举报