遊艇租賃(車票選擇) 最小租金計算

2021-10-07 23:48:15 字數 1322 閱讀 8129

package sort;

/*** 遊艇租賃最少費用計算:a點-b點,中途有1,2,3,4,5,6個停靠站點;每兩個站點有不同的收費,計算任意兩個站點最優方案及計算金額

* (1,2)-2¥,(1,3)-6¥,(1,4)-9¥,(1,5)-15¥,(1,6)-20¥

* (2,3)-3¥,(2,4)-5¥,(2,5)-11¥,(2,6)-18¥

* (3,4)-3¥,(3,5)-6¥,(6,6)-12¥

* (4,5)-5¥,(4,6)-8¥

* (5,6)-6¥

* 思路:假設i點到j點會在k點停靠是最優解,將路程分為(i,i+1,i+2,...,k),(k,k+1,...,j),即可以分為子串行,不斷的拆解子串行

* 最終會計算i和j相差2個站點,i和j相差3個站點,i和j相差4個站點的最優解之和

* 當i=j m[i][j]=0;

* 當j=i+1 m[i][j]=r[i][j],r[i][j]是兩個站點的票價

* 當j>i+1 m[i][j]=min(i-k-j的票價之和和,i-j的票價取最小值)

* 定義二維陣列:r[i][j]是各個站點之間票價,m[i][j]計算個點之間的最小費用,s[i][j]記錄兩點之間停靠的站點

* @author fengbin

*/public class minmoney }}

}}/*** 列印最短路線

* @param i

* @param j

*/public static void print(int i,int j)

print(i,s[i][j]);

print(s[i][j],j);

}/**

* 列印二維陣列

* @param arr

*/public static void printarr(int arr)

system.out.println();}}

public static void main(string args) ;

int index=0;

for (int i = 1; i }//初始各個站點

for (int i = 0; i < ms; i++)

if(j==0 && iprintarr(m);

rent();

system.out.println("s[i][j]記錄兩點之間停靠的站點:");

printarr(s);

system.out.println("花費的最少租金為:"+m[1][n]);

system.out.println("花費最少租金經過的站點:");

print(1,n);}}