7-11 租用游艇问题 (15 分)(思路+详解+一步步分析+网格解决动态规划问题)Come boy!!!!
一:題目
題目來源:王曉東,《算法設計與分析》
長江游艇俱樂部在長江上設置了n個游艇出租站1,2,…,n。游客可在這些游艇出租站租用游艇,并在下游的任何一個游艇出租站歸還游艇。游艇出租站i到游艇出租站j之間的租金為r(i,j),1<=i<j<=n。試設計一個算法,計算出從游艇出租站1 到游艇出租站n所需的最少租金。
輸入格式:
第1 行中有1 個正整數n(n<=200),表示有n個游艇出租站。接下來的第1到第n-1 行,第i行表示第i站到第i+1站,第i+2站, … , 第n站的租金。
輸出格式:
輸出從游艇出租站1 到游艇出租站n所需的最少租金。
輸入樣例:
在這里給出一組輸入。例如:
結尾無空行
輸出樣例:
在這里給出相應的輸出。例如:
二:思路
思路:本題的思路和矩陣鏈相乘思路一樣,但遞推方程不一樣
1:首先判斷是否用動態規劃:從1到最后的站N,那么這個求解的過程是跳躍性的
可以從1到2 然后從2到 N,或則從1到3,從3到N,其是跳躍性的,判斷其是動態規劃
2:回歸本題我們在考慮的時候,其中涉及到劃分問題,比如從2到N,可以從2到3,然后從
3到N,那么的我們可以找類似的思路,那就是矩陣連相乘
3: 總結出遞歸方程:m[i][j] = m[i][k]+m[k][j] 這里和矩陣鏈相乘有區別
注意遞推方程的區別:游艇:比如:從1到3,然后從3到N
矩陣鏈:比如從1到3,那么接下來就是4到N(A1A2A3A4A5)
三:來干了這杯代碼
/*思路:本題的思路和矩陣鏈相乘思路一樣,但遞推方程不一樣1:首先判斷是否用動態規劃:從1到最后的站N,那么這個求解的過程是跳躍性的可以從1到2 然后從2到 N,或則從1到3,從3到N,其是跳躍性的,判斷其是動態規劃2:回歸本題我們在考慮的時候,其中涉及到劃分問題,比如從2到N,可以從2到3,然后從3到N,那么的我們可以找類似的思路,那就是矩陣連相乘3: 總結出遞歸方程:m[i][j] = m[i][k]+m[k][j] 這里和矩陣鏈相乘有區別注意遞推方程的區別:游艇:比如:從1到3,然后從3到N矩陣鏈:比如從1到3,那么接下來就是4到N(A1*A2*A3*A4*A5) */ #include<bits/stdc++.h> using namespace std;int main(){int m[300][300];//注意定義二維數組不可定義的范圍過大 int N; cin >> N;// int m[N+1][N+1];//二維數組初始化 自己到自己為0for(int i = 0; i <= N; i++){m[i][i] = 0;} for(int i = 1; i <= N; i++){for(int j = i + 1; j <= N; j++){//這里的i+1 是 從 一個站到另一個站 cin >> m[i][j];}}//直接開始更新二維數組當中的值for(int i = N; i >= 1; i--){//for(int j = i + 1; j <= N; j++){//開始劃分for(int k = i + 1; k < j; k++){int temp = m[i][k] + m[k][j];if(temp < m[i][j]){ //求取最小值 m[i][j] = temp;} } } } cout << m[1][N]; } //3 //5 15 //7
加油 陌生的趕路人!成功本就不易,我們怎能輕言放棄!!!!!!!!!!!!!!!!!!!
總結
以上是生活随笔為你收集整理的7-11 租用游艇问题 (15 分)(思路+详解+一步步分析+网格解决动态规划问题)Come boy!!!!的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 美股周三:三大股指全线上涨,英伟达市值蒸
- 下一篇: DEV-C上的报错 Process ex