演算法 動態規劃(2)

2021-09-19 13:34:30 字數 1067 閱讀 1218

練習2:在一組數中選擇幾個數字使其加起來和最大,但是選中的幾個數字不能相鄰,求最大的和

以以下這組資料舉栗子

我們依舊是之前的思想:選或者不選!!!!!!

依舊是最優解opt(i)代表到第i個元素最優解是什麼

+代表選擇第i個     -代表不選擇第i個

我們發現這個展開圖中依舊出現了重疊子問題  ,比如opt(3)和opt(4),那麼我們就可以採用動態規劃,避免使用遞迴重複計算

opt(i-2) + arr [i]  ;    //選擇第i個元素opt(i)    =     maxopt(i-1)          //不選第i個元素

這就是該問題的遞迴式,那麼遞迴出口應該是什麼呢?對了,當i=0時,opt(i)=arr[0]   或者當i=1時,opt(1) = max ( arr[0], arr[1] );okkkkk,問題分析清楚了,上**

//遞迴版本    時間複雜度o(2^n)

int recopt(int *arr,int i)

int main()

; int len=sizeof(arr)/sizeof(arr[0]);

cout<接著看非遞迴版本

int notrecopt(int *arr,int i)

演算法 動態規劃2

動態求解陣列中不相鄰元素最大和。import numpy as np arr 1 2,4 1,7 8,3 32,55 3,2 432,6 題目要求 從陣列中挑出不相鄰的元素加起來求sum的最大值 動態規劃 非遞迴 defdp opt arr 建立乙個arr長度大小的元素全部為0的陣列 arr是原陣列...

演算法導論 2 動態規劃

動態規劃與分治方法類似,都是通過組合子問題的解來求解原問題 需要注意的是,動態規劃 dynamic programming 這裡的programming並不是指編寫電腦程式,而是指一種 法 分治方法將問題劃分為互不相交的子問題,遞迴地求解子問題,再將它們的解組合起來,求出原問題的解 動態規劃也是通過...

動態規劃演算法2

今天用了遞迴來解決昨天鋼管的最有切割問題,如下 include include include using namespace std int cut rod int p,int n int p 1000 int main else return q 如果各位有好的計算時間的函式,或給陣列前幾個元素...