zoukankan      html  css  js  c++  java
  • 剑指offer47题

      题目:在一个mXn的棋盘的每一格放有一个礼物,每个礼物都有一定的价值(价值大于0)。你可以从棋盘的左上角开始拿格子里的礼物,并每次向左或者向下移动一格,直到到达棋盘的右下角。给定一个棋盘及其上面的礼物,请计算你最多能拿到多少价值的礼物?

    1   10   3   8

    12    2    9   6

    5   7    4   11

    3   7   16  5

    可以看到,价值最大的就是,1->12->5->7->7->16->5。即标下划线的数字。

    那么现在,最好的方法就是动态规划了。这就是一道非常简单的动态规划。

    首先用一个二维数组,保存每一步的值,然后不停的循环。动态方程:f(i,j) = Max(f(i-1,j),f(i,j-1))+gift(i,j)

    当然,还有优化的方法,但现在先给出最简单的。看代码吧。

    package com.algorithm04;
    
    public class Algorithm47 {
        
        public int MaxMartix(int[][] matrix){
            
            int row,col;
            //行数
            row = matrix.length;
            //列数
            col = matrix[0].length;
            int MaxValue[][] = new int[row][col];
            for(int i = 0 ; i < row ; i++)
                for(int j = 0 ; j < col ;j++)
                {
                    int left,up;
                    left = up = 0;
                    //当前位置的左边和上边的最大值
                    int maxvalue;
                    if(i>0)
                    {
                        //求i,j上边的值
                        up = MaxValue[i-1][j];
                    }
                    if(j>0)
                    {
                        //求i,j左边的值
                        left = MaxValue[i][j-1];
                    }
                    //取出最大值
                    maxvalue = max(left,up);
                    //最大值加上当前位置的值
                    MaxValue[i][j] = maxvalue + matrix[i][j];
                }
            return MaxValue[row-1][col-1];
        }
        //返回i,j中的最大值
        private int max(int i, int j){
            return i>j?i:j;
        }
        public static void main(String[] args) {
            int[][] matrix = new int[][]{{1,10,3,8},{12,2,9,6},{5,7,4,11},{3,7,16,5}};
            Algorithm47 algorithm47 = new Algorithm47();
            int max = algorithm47.MaxMartix(matrix);
            System.err.println(max);
        }
    }
  • 相关阅读:
    bat 笔记 一
    air 桌面应用发布后可以删除的文件
    as3 去掉字符串空白问题
    as3 air 获取文件夹下的所有文件
    egret 配置设置
    egret 精简游戏项目
    starling 第一天
    《笨办法学Python》 第2课手记
    《笨办法学Python》 第1课手记
    《笨办法学Python》 第0课手记
  • 原文地址:https://www.cnblogs.com/CloudStrife/p/7376688.html
Copyright © 2011-2022 走看看