日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > python >内容正文

python

python 动态规划 数塔_数塔问题,简单的动态规划算法

發布時間:2023/12/10 python 28 豆豆
生活随笔 收集整理的這篇文章主要介紹了 python 动态规划 数塔_数塔问题,简单的动态规划算法 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

/*

數塔問題:

9

12 15

10 6 8

2 18 9 5

19 7 10 4 16

有形如圖所示的數塔,從頂部出發,在每一結點可以選擇向左走或是向右走,

一直走到底層,要求找出一條路徑,使路徑上的值最大。

這道題如果用枚舉法,在數塔層數稍大的情況下(如40),則需要列舉出的路徑條數將是一個非常龐大的數目。

如果用貪心法又往往得不到最優解。

在用動態規劃考慮數塔問題時可以自頂向下的分析,自底向上的計算。

從頂點出發時到底向左走還是向右走應取決于是從左走能取到最大值還是從右走能取到最大值,

只要左右兩道路徑上的最大值求出來了才能作出決策。

同樣的道理下一層的走向又要取決于再下一層上的最大值是否已經求出才能決策。

這樣一層一層推下去,直到倒數第二層時就非常明了。

如數字2,只要選擇它下面較大值的結點19前進就可以了。

所以實際求解時,可從底層開始,層層遞進,最后得到最大值。

總結:此題是最為基礎的動態規劃題目,階段、狀態的劃分一目了然。

而決策的記錄,充分體現了動態規劃即“記憶化搜索”的本質。

*/

#include [i]

#define MAX 20

using namespace std;

int main()

{

cout > n;

int a[MAX+1][MAX+1][3];? ? ? ? //[0]用來存數,[1]參與運算,[2]表示向左(0),還是向右(1)

//輸入數塔

for(int i = 1; i > a[i][j][0];

a[i][j][1] = a[i][j][0];

a[i][j][2] = 0;

}

}

cout = 1; --i)? ? ? ? //從倒數第二行開始

{

for(int j=1; j??a[i+1][j+1][1])? ? ? ? //左邊大

{

a[i][j][2] = 0;? ? ? ? ? ? ? ? //選擇左邊

a[i][j][1] += a[i+1][j][1];

}

else? ? ? ? //右邊大

{

a[i][j][2] = 1;? ? ? ? ? ? ? ? //選擇右邊

a[i][j][1] += a[i+1][j+1][1];

}

}

}

//輸出數塔

for(int i = 1; i??";

j += a[i][j][2];

}

cout

總結

以上是生活随笔為你收集整理的python 动态规划 数塔_数塔问题,简单的动态规划算法的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。