算法——Renting Boats

題目描述

長江遊艇俱樂部在長江上設置了n 個遊艇出租站1,2,…,n。遊客可在這些遊艇出租站租用遊艇,並在下游的任何一個遊艇出租站歸還遊艇。遊艇出租站i 到遊艇出租站j 之間的租金爲r(i,j),1< =i< j < =n。試設計一個算法,計算出從遊艇出租站1 到遊艇出租站n 所需的最少租金。

輸入

第1 行中有1 個正整數n(n<=200),表示有n個遊艇出租站。接下來的n-1 行是r(i,j),1< =i< j < =n。

輸出

從遊艇出租站1 到遊艇出租站n所需的最少租金

樣例輸入

3
5 15
7

樣例輸出

12

代碼

#include<iostream>
using namespace std;
int main(){
	int n;
	int a[200][200];
	cin>>n;
	for(int i = 1; i < n; i++){
		for(int j = i; j < n; j++){
			cin>>a[i][j];
			int s = a[1][i-1] + a[i][j];
			if(a[1][j] > s) a[1][j] = s;
		}
	}
	cout<<a[1][n-1]<<endl;
	return 0;
} 

結果

在這裏插入圖片描述

思路

此題是動態規劃問題,用到了floyd算法。

爲了便於理解,以下圖例子來做解釋:

  1. 第一行輸入的n表示站點數,後面n-1行表示租金,第二行會輸入n-1個數,並且後面輸入數據的規律是增加一個行數輸入 數據會依次減少一個數據。所以上圖是階梯形狀。第n行只有一個數,表示倒數第二個站點到最後一個站點的租金;

  2. 帶有淺藍色背景的數據就是是輸入數據,爲了操作方便,把其放入二維數組當中;

  3. 第一行的數據存儲第一個站點到第n個站點(其他任意站點)的最少租金,輸入第m個站點到後面站點的各租金時,n到m站點的最少租金便已求得。

在這裏插入圖片描述

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章