算法设计与分析: 3-9 租用游艇问题

3-9 租用游艇问题


问题描述

长江游艇俱乐部在长江上设置了n个游艇出租站1,2,3…,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。


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

猜你喜欢

转载自blog.csdn.net/IOIO_/article/details/81017582