poj 1050 最大子矩阵和

简介:

一、思路

最大子矩阵和的方法和最大字段和一样

先单独对每行求最大字段和(此时,子矩阵的行为1,就是最大字段和了)

然后,把第i行后的各行对应列的元素加到第i行的对应列元素,每加一行,就求一次最大字段和,这样就把子矩阵的多行压缩为一行了,一行了就是最大字段和了

也可以这样理解:

a11 a12 a13
a21 a22 a23
a31 a32 a33

如图,先求第一行最大子段和,再求第一行跟第二行合起来的最大子段和,如a21+a11, a22+a12, a23+a13 的最大子段和,再求第一到第三合起来的最大子段和,如a11+a21+a31, a12+a22+a32, a13+a23+a33的最大子段和…..以此类推,直到求出整个矩阵的合起来的最大子段和,求出他们之中最大的那个和就是解.

二、AC code

#include <stdio.h>
#include <stdlib.h>

int m[101][101];

int main()
{
    int n,max,i,j,k,tmp;

    while(scanf("%d",&n) != EOF)
    {
        max=-10000;
        /*
        输入时,顺便求出各行的最大字段和的最大值
        */
        for(i=0;i<n;++i)
        {
            tmp=0;
            for(j=0;j<n;++j)
            {
                scanf("%d",&m[i][j]);
                if(tmp>0)tmp+=m[i][j];
                else tmp=m[i][j];

                if(tmp>max)max=tmp;
            }
        }

        for(i=0;i<n-1;++i)
        {
            for(j=i+1;j<n;++j)
            {
                tmp=0;
                for(k=0;k<n;++k)
                {
                    //相当于把子矩阵多行压缩为一行了
                    m[i][k]+=m[j][k];
                    if(tmp>0)tmp+=m[i][k];
                    else tmp=m[i][k];

                    if(tmp>max)max=tmp;
                }
            }

        }
        printf("%d\n",max);
    }

    return 0;   
}
AI 代码解读
相关文章
F-POJ-3414 Pots
POJ-3414 Time Limit:1000 ms Memory Limit:65536 K Description You are given two po...
1017 0
poj 3664
http://poj.org/problem?id=3664 进行两轮选举,第一轮选前n进入第二轮,第二轮选最高   #include #include using namespace std; struct vote { int a,b; int c; ...
753 0
POJ 2531
初学dfs参考别人代码,如有雷同,见怪不怪。#include using namespace std; int aa[25][25]; int maxa=0; int step[25]={0},n; void dfs(int a,int b) { int t=b; step...
732 0
poj-3185-开关问题
描述   牛一行20他们喝的水碗。碗可以那么(面向正确的为清凉水)或颠倒的(一个位置而没有水)。他们希望所有20个水碗那么,因此用宽鼻子翻碗。   嘴太宽,他们不仅翻转一碗还碗的碗两侧(总共三个或三个——在两端的情况下碗——两碗)。
831 0
poj-1008-玛雅历
Description 上周末,M.A. Ya教授对古老的玛雅有了一个重大发现。从一个古老的节绳(玛雅人用于记事的工具)中,教授发现玛雅人使用了一个一年有365天的叫做Haab的历法。这个Haab历法拥有19个月,在开始的18个月,一个月有20天,月份的名字分别是pop, no, zip, zotz, tzec, xul, yoxkin, mol, chen, yax, zac, ceh, mac, kankin, muan, pax, koyab, cumhu。
903 0
poj-1006-Biorhythms
Description 人生来就有三个生理周期,分别为体力、感情和智力周期,它们的周期长度为23天、28天和33天。每一个周期中有一天是高峰。在高峰这天,人会在相应的方面表现出色。例如,智力周期的高峰,人会思维敏捷,精力容易高度集中。
638 0
AI助理

你好,我是AI助理

可以解答问题、推荐解决方案等