Java日記2018-05-16

第一題 禮物的最大價值

在一個 m*n 的棋盤的每一個格都放有一個禮物,每個禮物都有一定價值(大于 0)。從左上角開始拿禮物,每次向右或向下移動一格,直到右下角結(jié)束。給定一個棋盤,求拿到禮物的最大價值。

解題思路是動態(tài)規(guī)劃來計算。分開來想,由于只能向上或向下移動一格。那么對于dp[i]代表每一列的最大禮物值。對于m行n列的禮物,每向右邊一格代表的還是dp[i-1]+value(當前值),或向下一格實際代表dp[i]+value(當前值)。因為向右dp實際列變大,向下實際還是那同一列的dp。(初始化dp[0],因為i每向下走一格,對于初始列的最大禮物值就要加當前行0列的值)

public class GetMost {
    public static void getmost(int[][] arr) {
        if(arr==null) return;
        int m=arr.length;
        int n=arr[0].length;
        int[] dp = new int[n];
        for(int i=0;i<m;i++) {
            //初始化dp[0],因為i每向下走一格,對于初始列的最大禮物值就要加當前行0列的值
            dp[0]+=arr[i][0];
            for(int j=1;j<n;j++) {
                dp[j]=Math.max(dp[j], dp[j-1])+arr[i][j];
            }
        }
        
        System.out.println("the result:"+dp[n-1]);
    }
    public static void main(String[] args) {
        int[][] arr = {{1,10,3,8},{12,2,9,6},{5,7,4,11},{3,7,16,5}};
        getmost(arr);
    }

}

第二題 最長不含重復字符的子字符串

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

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

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