動態規劃中級題解

2021-07-11 19:05:47 字數 711 閱讀 5641

二維的動態規劃解決

題目:假設在乙個n*m的平面上,有n*m個格仔,每個格仔中都有一定數量的蘋果,每次我們只能從某個格仔處向右或者向下走,注意不能超過地圖的限制,請問如何設計路徑才可以保證最後從起點到終點後獲得的蘋果數量最多

動態規劃解析:建立二維的dp陣列dp[i][j]表示走到map[i][j]格的時候能夠獲得的最多的蘋果數目

最後將問題進行分解,不斷縮小規模,直到dp[startx][starty]=map[startx][starty]表示最開始的初始狀態

附上**:

#include"iostream"

#include"cstdio"

using namespace std;

int map[100][100];

int dp[100][100];

int n,m;

int startx,starty,endx,endy;

int sum=0;

int rightk=0,down=0;

int maxk=0;

int main()

} cin>>startx>>starty>>endx>>endy;

sum=dp[startx][starty]=map[startx][starty];

for(int i=startx;i<=endx;i++) }

cout<

看著沒有難度,實際細思極恐,待解問題

題解 動態規劃

目錄全部分 這道題首先不考慮優化,我們該怎麼寫呢?顯然,這是乙個區間dp,我們可以利用記憶化搜尋來寫。1 定義狀態 dp i j 表示前i頭分j段的最小價值。2 狀態轉移方程 ans min ans,value x,i dfs dp i 1,left 1 這個狀態轉移方程和 這道題十分類似。3 然後...

動態規劃題解與分析

問題1 陣列的每個索引作為乙個階梯,第 i個階梯對應著乙個非負數的體力花費值 cost i 每當你爬上乙個階梯你都要花費對應的體力花費值,然後你可以選擇繼續爬乙個階梯或者爬兩個階梯。您需要找到達到樓層頂部的最低花費。在開始時,你可以選擇從索引為 0 或 1 的元素作為初始階梯。示例 1 輸入 cos...

動態規劃典型例題解析

動態規劃的主要思想是把問題劃分為乙個個子狀態,乙個狀態的最優解往往是基於其前乙個狀態的最優解。兩個狀態之間的關係,我們就稱之為狀態轉移方程。這裡引出了狀態和狀態轉移方程的概念 狀態是乙個當前的值,這個值是通過前乙個值以及狀態轉移方程推得的。在解決動態規劃問題的時候,我們往往會把問題建模為乙個一維陣列...