ACM篇:POJ 1050 -- To the Max

動態規劃入門之最大連續子序列和。

#include <iostream>
#include <cstdio>

#define max(a,b) (((a) > (b)) ? (a) : (b))
using namespace std;

const int N = 100;
const int INF = -999999999;

int n;
int sum[N+2][N+2];
int temp[N+2];

void read_martrix()
{
    scanf("%d", &n);

    int x;
    for (int i = 1; i <= n; i++)
        for (int j = 1; j <= n; j++)
        {
            scanf("%d", &x);
            sum[i][j] = sum[i-1][j] + x;
        }
}
int find_max(int start, int end)
{
    for (int j = 1; j <= n; j++)
        temp[j] = sum[end][j] - sum[start-1][j];

    int count = 0;
    int ans = INF;
    for (int i = 1; i <= n; i++)
    {
        if (count < 0)
            count = temp[i];
        else 
            count += temp[i];
        ans = max(ans, count);
    }
    return ans;
}

int main()
{
    read_martrix();

    //  enumberate
    int ans = INF;
    for (int i = 1; i <= n; i++)
        for (int j = i; j <= n; j++)
            ans = max(ans, find_max(i, j));

    printf("%d", ans);

    return 0;
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章