年終獎

小東所在公司要發(fā)年終獎,而小東恰好獲得了最高福利,他要在公司年會上參與一個抽獎游戲,游戲在一個6*6的棋盤上進行,上面放著36個價值不等的禮物,每個小的棋盤上面放置著一個禮物,他需要從左上角開始游戲,每次只能向下或者向右移動一步,到達右下角停止,一路上的格子里的禮物小東都能拿到,請設(shè)計一個算法使小東拿到價值最高的禮物。

給定一個6*6的矩陣board,其中每個元素為對應(yīng)格子的禮物價值,左上角為[0,0],請返回能獲得的最大價值,保證每個禮物價值大于100小于1000。

public class Main{

    //動態(tài)規(guī)劃
    //每個點當前所能獲得的最大價值 = 上一個點所能獲得的最大價值 + 自身點的價值
    public static int getMostValue(int[][] board) {
        int n = board.length;        // 棋盤寬高 n * n
        int[][] curMostValue = new int[n][n];    // 每個點所能獲得的最大價值
        for(int i = 0 ; i < n ; i++) {
            for(int j = 0 ; j < n ; j++) {
                if(i == 0 && j == 0) // 棋盤左上角點獲得的最大價值 = 自身點的價值
                    curMostValue[i][j] = board[i][j];
                else if(i == 0) // 第一行棋盤點的價值 = 左側(cè)點的最大價值 + 自身點的價值
                    curMostValue[i][j] = curMostValue[i][j - 1] + board[i][j];
                else if(j == 0) // 第一列棋盤點的價值 = 上側(cè)點的最大價值 + 自身點的價值
                    curMostValue[i][j] = curMostValue[i - 1][j] + board[i][j];
                else // 其他棋盤點的價值 = max(左側(cè)點的最大價值, 上側(cè)點的最大價值) + 自身點的價值
                    curMostValue[i][j] = Math.max(curMostValue[i - 1][j], curMostValue[i][j - 1]) + board[i][j];
            }
        }
        return curMostValue[n - 1][n - 1]; //右下角點的curMostValue即為可拿到的最大價值
    }

    public static void main(String[] args) {
        int[][] board ={
                {2,2,1,1,2,1},
                {3,2,4,3,1,2},
                {1,2,5,4,1,3},
                {2,1,3,3,2,1},
                {1,3,2,4,1,2},
                {2,2,4,1,2,2}};
        System.out.println(getMostValue(board));
    }
}
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容