栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Python

最大子矩阵

Python 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

最大子矩阵

最大子矩阵

提示:这里可以添加系列文章的所有文章的目录,目录需要自己手动添加
例如:第一章 Python 机器学习入门之pandas的使用


提示:写完文章后,目录可以自动生成,如何生成可参考右边的帮助文档

文章目录
  • 最大子矩阵
    • @[TOC](文章目录)
  • 一、题目描述
  • 二、分析

一、题目描述
已知矩阵的大小定义为矩阵中所有元素的和。给定一个N*M矩阵,你的任务是找到最大的非空(大小至少是1*1)子矩阵。
比如,如下4*4的矩阵
0 -2 -7 0
9 2 -6 2
-4 1 -4 1
-1 8 0 -2
的最大子矩阵是
9 2
-4 1
-1 8
这个子矩阵的大小是15。
二、分析

一个n行m列的矩阵,
[x00,x01,x01,x0m-1,…xn-1]假设最大的子列和是从i行到j行,从k列到l列(0<=i<=j<=n;0<=k<=l<=m)。我们可以先把i行都j行的元素按列加和,则问题就变成求解最大子列和问题

Xi,0Xi,1…Xi,m-1
Xi+1,0Xi+1,0,1…Xi+1,0,m-1
––
Xj,0Xj,1…Xj,m-1

转化成

Xi,0+Xi+1,0+…+Xj,0Xi,1+Xi+1,1+…+Xj,1…Xi,m-1+Xi+1,m-1+…+Xj,m-1

这样就变成求最大子列和的问题,最大子列和用动态规划即可解决。
比如数组a0,a1,…an-1。 dp[i]为a0到ai的最大子列和,
dp[i] = max(a[i],dp[i-1]+a[i]);

#include 
#include 
#include 
#include 
#include 

using namespace std;



int main()
{
    int n,m;
    cin>>n>>m;
    
    int matrix[n][m],sum[m],dp[m],maxSum;
    for(int i=0;i>matrix[i][j];
    maxSum=matrix[0][0];
    for(int i=0;i
        memset(sum,0,sizeof(sum));
        for(int j=i;j
            for(int k=0;k
                sum[k]+=matrix[j][k];
                dp[0]=sum[0];
                maxSum=max(dp[0],maxSum);
                for(int k=1;k
                    dp[k]=max(sum[k],dp[k-1]+sum[k]);
                    maxSum=max(dp[k],maxSum);
                }
            } 
        }
    }
    
    cout< 

---

# 总结
主要是能将二维数组转为一维数组,然后用动态规划求最大子列和

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/926098.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号