zoukankan      html  css  js  c++  java
  • POJ 1050 To the Max

    题意:最大子矩阵和问题。

    解法:n^2的枚举一段矩阵,如下

    a11 a12 ... a1i ... a1j ... a1n

    a21 a22 ... a2i ... a2j ... a2n

    ...

    an1 an2 ... ani ... anj ... ann

    枚举出从i到j的一段矩阵,将每行的值加和则得到一个数组{a1ij, a2ij, ..., anij},对数组求最大子段和(方程:maxn[i] = max(maxn[i - 1] + a[i], a[i])),所有最大子段和的最大值即为答案。

    代码:

    #include<stdio.h>
    #include<iostream>
    #include<algorithm>
    #include<string>
    #include<string.h>
    #include<math.h>
    #include<limits.h>
    #include<time.h>
    #include<stdlib.h>
    #include<map>
    #include<queue>
    #include<set>
    #include<stack>
    #include<vector>
    #define LL long long
    using namespace std;
    int main()
    {
        int n;
        int a[105][105];
        while(~scanf("%d", &n))
        {
            int ans = -2000000;
            for(int i = 0; i < n; i++)
                for(int j = 0; j < n; j++)
                    scanf("%d", &a[i][j]);
            for(int i = 0; i < n; i++)
                for(int j = i; j < n; j++)
                {
                    int maxx = -2000000;
                    for(int k = 0; k < n; k++)
                    {
                        int sum = 0;
                        for(int l = i; l <= j; l++)
                            sum += a[k][l];
                        maxx = max(maxx + sum, sum);
                        ans = max(maxx, ans);
                    }
                }
            printf("%d
    ", ans);
        }
        return 0;
    }
    
    

     PS:之前把maxx初始化为INT_MIN加负数之后溢出了QAQ

  • 相关阅读:
    js截取字符串区分汉字字母代码
    List 去处自定义重复对象方法
    63. Unique Paths II
    62. Unique Paths
    388. Longest Absolute File Path
    41. First Missing Positive
    140. Word Break II
    139. Word Break
    239. Sliding Window Maximum
    5. Longest Palindromic Substring
  • 原文地址:https://www.cnblogs.com/Apro/p/4446453.html
Copyright © 2011-2022 走看看