博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
算法笔记_176:历届试题 最大子阵(Java)
阅读量:6976 次
发布时间:2019-06-27

本文共 1518 字,大约阅读时间需要 5 分钟。

目录

 


1 问题描述

问题描述
  给定一个n*m的矩阵A,求A中的一个非空子矩阵,使这个子矩阵中的元素和最大。
  其中,A的子矩阵指在A中行和列均连续的一块。
输入格式
  输入的第一行包含两个整数n, m,分别表示矩阵A的行数和列数。
  接下来n行,每行m个整数,表示矩阵A。
输出格式
  输出一行,包含一个整数,表示A中最大的子矩阵中的元素和。
样例输入
3 3
-1 -4 3
3 4 -1
-5 -2 8
样例输出
10
样例说明
  取最后一列,和为10。
数据规模和约定
  对于50%的数据,1<=n, m<=50;
  对于100%的数据,1<=n, m<=500,A中每个元素的绝对值不超过5000。

 

 


2 解决方案

代码参考自文末参考资料,同样思想的Java版本运行超时。具体思想讲解请见文末参考资料。

 

具体代码如下:

import java.util.Scanner;public class Main {    public static int n, m;    public static long[][] map;    public static long result = Long.MIN_VALUE;            public static void main(String[] args) {        Scanner in = new Scanner(System.in);        n = in.nextInt();        m = in.nextInt();        map = new long[n][m];        for(int i = 0;i < n;i++)            for(int j = 0;j < m;j++)                map[i][j] = in.nextLong();        for(int start = 0;start < n;start++) {  //开始行            long[] ring = new long[m];            long[] dp = new long[m];            for(int end = start;end < n;end++) {  //结束行                for(int j = 0;j < m;j++)      //计算start~end行的每一列元素和                    ring[j] += map[end][j];                result = Math.max(result, ring[0]);                dp[0] = ring[0];                for(int j = 1;j < m;j++) {                    if(dp[j - 1] < 0)                        dp[j] = ring[j];                    else                        dp[j] = dp[j - 1] + ring[j];                    result = Math.max(result, dp[j]);                }            }        }        System.out.println(result);    }}

 

 

 

参考资料:

   1.

 

转载地址:http://ivesl.baihongyu.com/

你可能感兴趣的文章
NLP 专题论文解读:从 Chatbot 到 NER | PaperDaily #11
查看>>
最通俗易懂的解读比特币相关原理
查看>>
如何保证CAN网络中通讯的可靠性和节点数
查看>>
用C语言对Gtk+应用进行功能测试
查看>>
无聊时,可以去HASKELL里找点感觉
查看>>
江苏力推“不见面审批” 筹建省级大数据管理中心
查看>>
新华三下一代计算开启新格局
查看>>
杰和N60E-O荣获德国Hardwareinside金牌奖
查看>>
中国工程院院士刘韵洁:中国未来网络创新环境CENI的探索
查看>>
32个云服务通过第三批可信云服务认证 信用体系建设持续加力
查看>>
云生态:云计算棋局中的“胜负手”
查看>>
顺德拟投15亿元建大数据中心
查看>>
隐藏恶意软件的三大黑客技术
查看>>
《Spark与Hadoop大数据分析》——1.3 工具和技术
查看>>
数字时代反思竞争理论
查看>>
思科年中报告:坏人正变得更坏
查看>>
IDC:移动化发展增速 传统企业需要制定全方位移动战略
查看>>
物超所值的七大Windows安全工具
查看>>
从零学React Native之07View
查看>>
BYOD管理市场 EMM潜力无限
查看>>