遊艇租用問題
實驗目的和內容
實驗目的
(1) 能用程式語言實現求解相關問題的演算法;
(2) 深刻掌握動態規劃法的設計思想並能熟練運用;
(3) 理解這樣乙個觀點:同樣的問題可以用不同的方法解決,乙個好的演算法是反覆 努力和重新修正的結果。
實驗內容
長江遊艇俱樂部在長江上設定了n個遊艇出租站1,2,…,n。遊客可在這些遊艇出租站租用遊艇,並在下游的任何乙個遊艇出租站歸還遊艇。遊艇出租站i到遊艇出租站j之間的租金為r(i,j),1i對於給定的遊艇出租站i到遊艇出租站j之間的租金為r(i,j),1i主要儀器裝置及耗材
visual studio 2017
個人電腦
實驗過程
實驗設計
用乙個二維陣列dp[100][100]作為求解問題過程中的備忘錄,列出狀態轉移方程dp(1,j)=min(dp(1,j),dp(1,j-1)+dp(j-1,j));每一次迴圈中都將經過min()函式比較判斷後得到的結果在dp陣列備忘錄中更新,此次更新後的值將作為下一步運算的直接依據,這也是動態規劃演算法的特點。最後一次迴圈結束後得到的dp[1][n]中的值就是最後的結果。
實驗**
#define _crt_secure_no_warnings
#includeusing namespace std;
int min(int a,int b)
int main()
for (j = 2; j <= n; j++)
result = dp[1][n];
freopen("output.txt", "w", stdout);
cout << "最少租金是" 實驗結果及分析
實驗結果截圖:
實驗小結
通過本次實驗,我熟練地掌握了運用「動態規劃法」求解問題的一般步驟,先劃分子問題再構建狀態轉移方程人工演算驗證演算法的正確性編寫程式實現,其中構建狀態轉移方程是關鍵,是之後編寫程式的依據,動態規劃中常常用到陣列作為」備忘錄」(用到的是」空間換時間」的思路),這樣可以有效地利用到之前運算的結果,避免相同的問題重複計算,可以提高演算法的效率.
運籌學狀態轉移方程例子 《運籌學》讀書筆記
一運籌學緒論 operations research o.r 運籌學是一門應用科學,它廣泛應用現有的科學技術知 識和數學方法,解決實際中提出的專門問題,為決策者提供 最優決策的定量方法。特點 考慮系統的整體優化 多學科的配合以及模型方法的應用。發展歷史 1 田忌賽馬 丁渭修皇宮 2 1938年英國波...
運籌學 5 整數規劃
1 整數線性規劃問題定義 2 0 1變數定義限制條件的表達 使用binary variables 0 1變數 來表示邏輯性條件限制。a.總的只能有某幾個變數被選擇 和小於某個數 b.選擇指定某幾個變數 這幾個變數的和等於某個數 c.幾個之中至少有乙個被選擇,和等於一 d.有順序,只有當某個變數x1被...
動態規劃 狀態轉移方程練習
1.給定乙個陣列penny表示可用的零錢都有哪些面值,再給定乙個整數n表示penny的長度,再給定乙個整數m表示需要換零錢的整錢面值,輸出換錢的方案有幾種。樣例 1,2,4 3,3 返回 2 這是乙個比較簡單的動態規劃問題,dp為狀態陣列,只使用1的時候有一種方法 3 1 1 1 使用1 2的時候有...