遊艇租用問題## 動態規劃
阿新 • • 發佈:2020-12-22
遊艇租用問題## 動態規劃
遊艇租用問題
租用遊艇問題。
長江遊艇俱樂部在長江上設定了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]即為所求 } }
}