码迷,mamicode.com
首页 > 其他好文 > 详细

动态规划(DP),最大矩阵和

时间:2016-03-15 23:32:17      阅读:189      评论:0      收藏:0      [点我收藏+]

标签:

题目链接:http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemId=74

http://poj.org/problem?id=1050

解题报告:

1、用b[i]来记录某一行到第i行的某一列的和。

2、用b[k]=b[k]+a[j][k]来更新。

3、用sum=sum+b[k]来记录第i行到下面的那一行的那个矩阵的和(列数变化)。

4、if(sum<b[k])表示第k列之前的矩阵为负,最大和就为sum=b[k];

5、更新max。

 

#include <stdio.h>
#include <algorithm>
#include <string.h>

using namespace std;

int Max=-0x3f3f3f3f;///最优值
int a[105][105];///存储矩阵
int b[105];///b[i],表示之前的某一行到第i行的矩阵和


int main()
{
    int n;
    int i,j,k;
    scanf("%d",&n);
    for(i=0;i<n;i++)///输入矩阵
    {
        for(j=0;j<n;j++)
        {
            scanf("%d",&a[i][j]);
        }
    }
    for(i=0;i<n;i++)///开始从第0行往下走
    {
        memset(b,0,sizeof(b));
        for(j=i;j<n;j++)///开始从i行往下走
        {
            int sum=0;///i~j行的矩阵和(列数不断变化)
            for(k=0;k<n;k++)
            {
                b[k]=b[k]+a[j][k];
                sum=sum+b[k];
                if(sum<b[k]) sum=b[k];///第k列之前为负,则最大和sum=b[k];
                if(sum>Max) Max=sum;
            }
        }
    }
    printf("%d\n",Max);
    return 0;
}

 

动态规划(DP),最大矩阵和

标签:

原文地址:http://www.cnblogs.com/TreeDream/p/5281556.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!