zoukankan      html  css  js  c++  java
  • POJ 1050 To the Max(最大子段) yongmou

        题意很简单:求一个矩阵中子矩阵元素和的最大值。

      思路:穷举任意两行,对这两行的列和求最大子段。最大子段递归方程:s[k] = (s[k-1]>0) ? (s[k-1]+ a[k]) : a[k]。s[k]表示以a[k]结尾的最大子段和,

    方程式的意思是,如果s[k-1]>0则以a[k]结尾的最大子段包括前面的子段,否则以a[k]结尾的最大子段就是它本身。

     代码:

    #include<cstdio>
    using namespace std;

    int n;
    int matrix[100][100];
    int s[100];

    int get_max(){
    int max = -127 * 100 * 100;
    for(int i=0; i<n; i++)
    for(int j=i; j<n; j++){
    int a = 0;
    for(int x=i; x<=j; x++)
    a
    += matrix[x][0];
    s[
    0] = a;
    if(s[0] > max)
    max
    = s[0];

    for(int k=1; k<n; k++){
    a
    = 0;
    for(int x=i; x<=j; x++)
    a
    += matrix[x][k];
    if(s[k-1]>0)
    s[k]
    = s[k-1] + a;
    else
    s[k]
    = a;

    if(s[k] > max)
    max
    = s[k];
    }
    }
    return max;
    }

    int main(){
    // freopen("in", "r", stdin);

    while (scanf("%d", &n) != EOF) {
    for (int i = 0; i < n; ++i)
    for (int j = 0; j < n; ++j)
    scanf(
    "%d", &matrix[i][j]);

    int max;
    max
    = get_max();
    printf(
    "%d\n", max);
    }
    }
    s[k] = (s[k-1]>0) ? (s[k-1]+ a) : as[k] = (s[k-1]>0) ? (s[k-1]+ a) : a
  • 相关阅读:
    DP 水题 最长不下降子序列
    数的划分
    水题------纪念品分组
    NY95 众数问题
    NY86 找球号(一)
    C3-Zexal的矩阵链乘
    C3-Zexal的多路流水线调度
    C4-Zexal的食物链
    C4-排列
    C3-炮弹杀伤力
  • 原文地址:https://www.cnblogs.com/liyongmou/p/1773987.html
Copyright © 2011-2022 走看看