• 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
  • 相关阅读:
    java 学习
    dubbox 学习
    无能的力量 -- 《看见》
    idea 学习
    小问题?
    《密码学》换字式密码破解。(2)
    《密码学》换字式密码、多表替代密码和转置式密码。(1)
    《密码学》 凯撒密码和栅格密码(0)
    Windows 常用消息及含义
    WM消息大全
  • 原文地址:https://www.cnblogs.com/liyongmou/p/1773987.html
Copyright © 2020-2023  润新知