3-9 租用游艇问题
问题描述
长江游艇俱乐部在长江上设置了n个游艇出租站1,2,3…,n。游客可以在这些游艇出租站用游艇,并在下游的任何一个游艇出租站归还游艇。游艇出租站i到游艇出租站j之间的租金为 ,1<=i< j <=n。试设计一个算法,计算从游艇出租站1到出租站n所需的最少租金。
数据输入
第1行中有1个正整数n(n<=200),表示有n个游艇出租站,接下来的n-1行是r(i,j),1<=i< j<=n。
Java
import java.util.Scanner;
public class ZuYongYouTing {
public static void main(String[] args){
Scanner input = new Scanner(System.in);
int n;
int[][] fee;
while (true){
n = input.nextInt();
fee = new int[n][n];
for(int row=0; row<n-1; row++)
for(int col=row+1; col<n; col++)
fee[row][col] = input.nextInt();
for(int k=2; k<n; k++)
for(int i=0; i<n-k; i++){
int j = i+k;
for(int p =i+1; p<j; p++){
int tmp = fee[i][p] + fee[p][j];
if(fee[i][j] > tmp)
fee[i][j] = tmp;
}
}
System.out.println(fee[0][n-1]);//fee[i][j]: 从第i个出租站到第j个出租站所需的最少租金,可见fee[0][n-1]即为所求
}
}
}
Input & Output
3
5 15
7
12
Reference
王晓东《计算机算法设计与分析》(第3版)P91