1. 问题描述
长江游艇俱乐部在长江上设置了n个游艇出租站1,2,…,n。游客可在这些游艇出租站租用游艇,并在下游的任何一个游艇出租站归还游艇。游艇出租站i到游艇出租站j之间的租金为r(i,j),1£i<j£n。试设计一个算法,计算出从游艇出租站1到游艇出租站n所需的最少租金。
2. 编程任务
出租站i到游艇出租站j之间的租金为r(i,j),1≤i<j≤n,编程计算从游艇出租站1到游艇出租站n所需的最少租金。
3. 问题分析
仍然使用租金数组 r(i, j) (1≤i<j≤n)来记录出租站 i 到游艇出租站 j 之间的租金,在两个站之间加入站 k 作为中转站,将 i 到 j 分为两段,以此来计算 i 到 j 的租金,如果新的中转方案比原来的租金少,则将少的租金记录下来。
依照上述写出算法的递归式如下:
4. 代码实现
下面是关键类CalculateRent的实现代码,测试代码就不贴了,因为涉及到文件读写和数组 r[][] 的初始化。
public class CalculateRent {
private int[][] r;
public CalculatePay(int r[][]){
this.r = r;
}
publi