zoukankan      html  css  js  c++  java
  • 求一个矩阵中最大的2*2矩阵(元素和最大)的和

     编程题在线编程题30分2/2
    最大子矩阵
    Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/65536 K (Java/Others)
    Problem Description:
    求一个矩阵中最大的2*2矩阵(元素和最大)的和。
    如:
    1 2 0 3 4
    2 3 4 5 1
    1 1 5 3 0
    中最大的是:
    4 5
    5 3
    和为17
    输入
    m*n的矩阵
    输出
    该m*n矩阵的最大2*2子矩阵(元素和最大)的和

    样例输入
     1 2 0 3 4 ; 2 3 4 5 1 ; 1 1 5 3 0
    样例输出
    17 
     
    HDU CS505实验室,与各位共享~
     
      分析:假设输入的字符串被分割为row x col的矩阵。基本思想,以2x2的方框,遍历这个矩阵。生成一个(row-1)*(col-1)的结果矩阵。遍历这个新矩阵,得到最大值。此时可以直接输出最大值,如果要输出产生最大值的2x2矩阵,那么需要得到这个最大值在新矩阵的坐标。这个坐标就是原矩阵中2x2方框左上角的坐标。
    直接上代码(java实现):
     
     1 package javaTest;
     2 
     3 import java.util.Scanner;
     4 
     5 public class test {
     6     
     7     public static void main(String[] args){
     8         // TODO Auto-generated method stub
     9         Scanner scanner = new Scanner(System.in);
    10         String inputString = scanner.nextLine();
    11         
    12         //get matrix
    13         int[][] matrix = getMatrix(inputString);
    14         int[] rowcol=getXY(matrix);
    15         int row=rowcol[0];
    16         int col=rowcol[1];
    17         try {
    18             System.out.print(matrix[row][col]+matrix[row][col+1]+matrix[row+1][col]+matrix[row+1][col+1]);
    19         } catch (Exception e) {
    20             // TODO: handle exception
    21         }
    22         scanner.close();
    23     }
    24     //根据输入的字符串得到新字符
    25     static int[][] getMatrix(String str){
    26         int[][] matrix;
    27         String[] lineStrArray = str.split(";");
    28         String[] charArrayStrings = lineStrArray[0].split(" ");
    29         
    30         int row = lineStrArray.length;
    31         int col = charArrayStrings.length;
    32         matrix = new int[row][col];
    33         for(int i=0;i<row;i++)
    34             for(int j=0;j<col;j++){
    35                 String[] ArrayStrings = lineStrArray[i].split(" ");
    36                 try{
    37                     matrix[i][j]=Integer.parseInt(ArrayStrings[j]);
    38                 }
    39                 catch(Exception e){
    40                     
    41                 }
    42             }
    43         return matrix;
    44     }
    45     
    46     static int[] getXY(int[][] matrix){
    47         int row = matrix.length;
    48         int col = matrix[0].length;
    49         //get results
    50         int[][] result=new int[row-1][col-1];
    51         for(int i=0,k=0;i<row-1;i++){
    52             for(int j=0;j<col-1;j++){
    53                 int r=matrix[i][j]+matrix[i][j+1]+matrix[i+1][j]+matrix[i+1][j+1];
    54                 result[i][j]=r;
    55             }
    56         }
    57         int[] index = getMaxIndex(result);
    58         
    59         int[] rowcol=new int[2];
    60         rowcol[0] = index[0];
    61         rowcol[1] = index[1];
    62         return rowcol;
    63     }
    64     
    65     static int[] getMaxIndex(int[][] result){
    66         int[] rowcol=new int[2];
    67         int max=result[0][0];
    68         int maxI=0,maxJ=0;
    69         for(int i=1;i<result.length;i++){
    70             for(int j=0;j<result[0].length;j++){
    71                 if(max<result[i][j]){
    72                     max = result[i][j];
    73                     maxI=i;
    74                     maxJ=j;
    75                 }
    76             }
    77         }
    78         rowcol[0]=maxI;
    79         rowcol[1]=maxJ;
    80         return rowcol;
    81     }
    82 }
  • 相关阅读:
    js动态生成表格
    My97DatePicker显示时间控件的使用方法
    理解Action,Service和Dao功能(转)
    Myeclipseforspring 10破解
    MySQL常用命令(参考资料,部分改动)
    Struts2---Result(传统Web应用程序与Ajax应用程序的异同)
    正则表达式笔记
    day5.字符串内置函数
    day5.数据类型简介
    day4.变量+程序交互
  • 原文地址:https://www.cnblogs.com/fang-io/p/4839624.html
Copyright © 2011-2022 走看看