1. 程式人生 > 其它 >遊艇租用問題## 動態規劃

遊艇租用問題## 動態規劃

技術標籤:演算法演算法動態規劃java

遊艇租用問題## 動態規劃

遊艇租用問題

租用遊艇問題。
長江遊艇俱樂部在長江上設定了n個遊艇出租站1,2,…,n。遊客可在這些遊艇出租站租用遊艇,並在下游的任何一個遊艇出租站歸還遊艇。遊艇出租站i到遊艇出租站j之間的租金為r(i,j),1=<i<j=<n。試設計一個演算法,計算出從遊艇出租站1到遊艇出租站n所需的最少租金。
資料輸入:
由檔案input.txt提供輸入資料。檔案的第1行中有1個正整數n(n<=200),表示有n個遊艇出租站。接下來的n-1行是r(i,j),1=<i<j=<n。
結果輸出:
將計算出的從遊艇出租站1到遊艇出租站n所需的最少租金輸出到檔案output.txt中。

輸入檔案示例 輸出檔案示例
input.txt output.txt
3 12
5 15
7

package boat;

import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.InputStreamReader;
import java.util.Scanner;
//import java.io.FileOutputStream;
import java.io.PrintStream;

public class Boat {

public static void main(String[] args) throws FileNotFoundException{
	//獲取輸入檔案
	File file=new File("./boat.txt");       
    int n;
    int[][] fee;      
    Scanner a = new Scanner(new FileInputStream(file));
		
    while (a.hasNext()){
        n = a.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] = a.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;
                }
            }
        //輸出到output.txt檔案
        PrintStream ps = new PrintStream("./output.txt");
        System.setOut(ps);
        System.out.println(fee[0][n-1]);
        //fee[i][j]: 從第i個出租站到第j個出租站所需的最少租金,可見fee[0][n-1]即為所求
    }
}

}
輸出檔案