zoukankan      html  css  js  c++  java
  • POJ 1050 To the Max(最大矩阵)

    题目链接:http://poj.org/problem?id=1050

    和序列中无长度限制的最大子段和相同,如果当前的sum>0,那么它还有一定的价值,所以继续往上累加;如果当前sum<0,即sum不仅没有价值,反而会使后面的和更小,所以将sum重置为0为最优。

    矩阵中维护每一列上的前缀和,枚举所选矩阵上限i,下限j,枚举列数k,重复上述过程,记录整个过程中的最大值即为答案。

    AC代码:

     1 #include<cstdio>
     2 #include<iostream>
     3 #include<cstring>
     4 using namespace std;
     5 const int N=105;
     6 int n,maxx;
     7 int a[N][N];
     8 int main(){
     9     while(~scanf("%d",&n)){
    10         memset(a,0,sizeof(a));
    11         for(int i=1;i<=n;i++)
    12         for(int j=1;j<=n;j++){
    13             int t;
    14             scanf("%d",&t);
    15             a[i][j]=a[i-1][j]+t;
    16         }
    17         int sum=0;
    18         maxx=0;
    19         for(int i=1;i<=n;i++)
    20         for(int j=i;j<=n;j++){
    21             sum=0;
    22             for(int k=1;k<=n;k++){
    23                 int t=a[j][k]-a[i-1][k];
    24                 sum+=t;
    25                 if(sum<0) sum=0;
    26                 if(sum>maxx) maxx=sum;
    27             }
    28         }
    29         printf("%d
    ",maxx);
    30     }
    31     return 0;
    32 } 
    AC代码
  • 相关阅读:
    Java学习总结
    John 尼姆博弈
    博弈知识汇总(转)
    坏习纠正
    QDUOJ 河老师的新年礼物(尺取法)
    HDU
    QDUOJ ycb的ACM进阶之路 二进制多重背包
    HDU
    HDU
    POJ
  • 原文地址:https://www.cnblogs.com/New-ljx/p/13658244.html
Copyright © 2011-2022 走看看