国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

算法 矩陣最長遞增路徑-(遞歸回溯+動態(tài)規(guī)劃)

這篇具有很好參考價值的文章主要介紹了算法 矩陣最長遞增路徑-(遞歸回溯+動態(tài)規(guī)劃)。希望對大家有所幫助。如果存在錯誤或未考慮完全的地方,請大家不吝賜教,您也可以點擊"舉報違法"按鈕提交疑問。

??途W(wǎng): BM61

求矩陣的最長遞增路徑

解題思路:

1. 遍歷二維矩陣每個位置,max求出所有位置分別為終點時的最長路徑
2. 求某個位置為終點的最長路徑時,使用動態(tài)規(guī)劃dp對已經(jīng)計算出的位置進行記錄
3. 處理某個位置的最長路徑時,如果dp[i][j]位置已有值,則直接返回即可,否則對此位置賦值1,再對上下左右4個方向進行遞歸求解,每次遞歸后返回的最長路徑需+1才是當(dāng)前位置的最長路徑,使用max選擇最大值賦予dp[i][j],4個方向均遍歷完后返回dp[i][j]給主程序。

代碼:文章來源地址http://www.zghlxwxcb.cn/news/detail-730617.html

// go

package main
// import "fmt"

/**
 * 代碼中的類名、方法名、參數(shù)名已經(jīng)指定,請勿修改,直接返回方法規(guī)定的值即可
 *
 * 遞增路徑的最大長度
 * @param matrix int整型二維數(shù)組 描述矩陣的每個數(shù)
 * @return int整型
*/
func max(x, y int) int {
    if x > y {return x} else {return y}
}
var dirs = [][]int{{-1, 0}, {1, 0}, {0, -1}, {0, 1}}

func process(matrix, dp [][]int, i, j, m, n int) int {
    if dp[i][j] > 0 {
        return dp[i][j]
    }
    dp[i][j] = 1
    for k := 0; k < 4; k++ {
        nexti := i + dirs[k][0]
        nextj := j + dirs[k][1]
        if nexti >= 0 && nexti < m && nextj >= 0 && nextj < n && matrix[nexti][nextj] < matrix[i][j] {
            dp[i][j] = max(dp[i][j], process(matrix, dp, nexti, nextj, m, n) + 1)
        }
    }
    return dp[i][j]
}

func solve( matrix [][]int ) int {
    // write code here
    if len(matrix) == 0 || len(matrix[0]) == 0 {
        return 0
    }
    m := len(matrix)
    n := len(matrix[0])
    dp := make([][]int, m)
    for i := 0; i < m; i++ {
        dp[i] = make([]int, n)
    }
    res := 0
    for i := 0; i < m; i++ {
        for j := 0; j < n; j++ {
            res = max(res, process(matrix, dp, i, j, m, n))
        }
    }
    return res
}

到了這里,關(guān)于算法 矩陣最長遞增路徑-(遞歸回溯+動態(tài)規(guī)劃)的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實不符,請點擊違法舉報進行投訴反饋,一經(jīng)查實,立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費用

相關(guān)文章

  • BM61-矩陣最長遞增路徑

    BM61-矩陣最長遞增路徑

    題目 給定一個 n 行 m?列矩陣 matrix?,矩陣內(nèi)所有數(shù)均為非負(fù)整數(shù)。 你需要在矩陣中找到一條最長路徑,使這條路徑上的元素是遞增的。并輸出這條最長路徑的長度。 這個路徑必須滿足以下條件: 對于每個單元格,你可以往上,下,左,右四個方向移動。 你不能在對角線方

    2024年02月05日
    瀏覽(20)
  • 算法思想—枚舉、遞推、迭代、遞歸、分治、貪心、動態(tài)規(guī)劃、回溯、模擬、分支定界

    算法思想 枚舉(暴力算法) 枚舉算法(暴力算法)是一種通過逐一嘗試所有可能解來解決問題的算法。它的基本思想是將問題的所有可能答案一一列舉出來,并根據(jù)一定的判斷條件來確定哪些答案是合適的。這種算法通常使用循環(huán)來實現(xiàn),因為需要嘗試所有可能的情況。兩

    2024年02月01日
    瀏覽(19)
  • Java中常用算法及示例-分治、迭代、遞歸、遞推、動態(tài)規(guī)劃、回溯、窮舉、貪心

    Java中常用算法及示例-分治、迭代、遞歸、遞推、動態(tài)規(guī)劃、回溯、窮舉、貪心

    1、分治算法的基本思想是將一個計算復(fù)雜的問題分成規(guī)模較小、計算簡單的小問題求解, 然后綜合各個小問題,得到最終答案。 2、窮舉(又稱枚舉)算法的基本思想是從所有可能的情況中搜索正確的答案。 3、迭代法(Iterative Method) 無法使用公式一次求解,而需要使用重復(fù)結(jié)構(gòu)

    2024年02月08日
    瀏覽(25)
  • 算法分析與設(shè)計考前沖刺 (算法基礎(chǔ)、數(shù)據(jù)結(jié)構(gòu)與STL、遞歸和分治、 動態(tài)規(guī)劃、貪心算法、 回溯算法)

    算法分析與設(shè)計考前沖刺 算法基礎(chǔ) 算法是一系列解決問題的清晰指令,代表著用系統(tǒng)的方法描述解決問題的策略機制。 程序是算法用某種程序設(shè)計語言的具體的 具體實現(xiàn) 算法特征: 有窮性(有限步) 確定性 輸入 輸出 可行性(有限時間) 算法的復(fù)雜性: 時間復(fù)雜性 和空間復(fù)

    2024年02月02日
    瀏覽(25)
  • 【課設(shè)】java:迷宮小游戲(遞歸與分治、動態(tài)規(guī)劃、貪心算法、回溯法、分支限界法)

    【課設(shè)】java:迷宮小游戲(遞歸與分治、動態(tài)規(guī)劃、貪心算法、回溯法、分支限界法)

    魚弦:CSDN內(nèi)容合伙人、CSDN新星導(dǎo)師、全棧領(lǐng)域優(yōu)質(zhì)創(chuàng)作者 、51CTO(Top紅人+專家博主) 、github開源愛好者(go-zero源碼二次開發(fā)、游戲后端架構(gòu) https://github.com/Peakchen) 遞歸與分治算法 原理: 遞歸與分治算法將問題分解為子問題,遞歸地解決每個子問題,最后將結(jié)果合并得到整

    2024年02月02日
    瀏覽(32)
  • 動態(tài)規(guī)劃之最長遞增子序列

    leetcode 300 最長遞增子序列 1.定義dp數(shù)組:dp[i]表示以nums[i]結(jié)尾的最長遞增子序列的長度。 2.定義遞推公式 dp[i] = max(dp[j] + 1, dp[i]) 因為dp[j] + 1中的dp[j]并非是在前一個已經(jīng)加1的dp[j]的基礎(chǔ)之上再加上1。若從初始狀態(tài)加1,而dp[i]永遠(yuǎn)保持的是最大的狀態(tài),則dp[j] + 1肯定要小一些。

    2024年01月23日
    瀏覽(40)
  • leetcode329. 矩陣中的最長遞增路徑(java)

    leetcode329. 矩陣中的最長遞增路徑(java)

    來源:力扣(LeetCode) 鏈接:https://leetcode.cn/problems/longest-increasing-path-in-a-matrix 給定一個 m x n 整數(shù)矩陣 matrix ,找出其中 最長遞增路徑 的長度。 對于每個單元格,你可以往上,下,左,右四個方向移動。 你 不能 在 對角線 方向上移動或移動到 邊界外(即不允許環(huán)繞)。 示

    2024年02月10日
    瀏覽(20)
  • 【動態(tài)規(guī)劃】求最長遞增子序列問題

    【動態(tài)規(guī)劃】求最長遞增子序列問題

    最長遞增子序列(Longest Increasing Subsequence, LIS ) 子序列:對于任意序列s,它的子序列是通過刪除其中零個或多個元素得到的另?個序列 注:剩余元素的相對順序保持不變 給定n個整數(shù)組成的序列 s [ 1... n ] s[1...n] s [ 1... n ] ,求最長遞增子序列LIS(的長度) 8 3 6 1 3 5 4 7 假設(shè)

    2024年02月03日
    瀏覽(27)
  • 力扣--動態(tài)規(guī)劃300.最長遞增子序列

    力扣--動態(tài)規(guī)劃300.最長遞增子序列

    一開始想到的方法非常低效,但好理解。 ? 思路分析: 使用二維數(shù)組 dp 來記錄遞增子序列的長度信息,其中 dp[i][0] 表示以 nums[i] 結(jié)尾的最長遞增子序列的長度, dp[i][1] 表示包含 nums[i] 的最長遞增子序列的長度。 初始化 dp 數(shù)組,將以第一個元素結(jié)尾的遞增子序列長度置為

    2024年01月24日
    瀏覽(27)
  • LeetCode | C++ 動態(tài)規(guī)劃——300.最長遞增子序列、674. 最長連續(xù)遞增序列、718. 最長重復(fù)子數(shù)組

    300題目鏈接 dp 數(shù)組定義 dp[i] 表示 i 之前包括 i 的以 nums[i]結(jié)尾 的最長遞增子序列的長度 需要包含nums[i]結(jié)尾,不然在做遞增比較的時候,就沒有意義了。 遞推公式 位置 i 的最長遞增子序列 等于 j 從 0 到 i - 1各個位置的最長遞增子序列 + 1 的 最大值 if (nums[i] nums[j]) dp[i] = ma

    2024年02月16日
    瀏覽(49)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包