租用游艇问题
2014-10-18 16:29
183 查看
采用动态规划
主要思想:先算出所有经过2个站的最小值,然后再算出所有经过3个站的最小值(依据于2个站的最小值),一直到n个站即可得到所求值。
package shiyansi;
public class ZhuYongYouTing {
public static void main(String []args) {
int n = 3;
int w[][] = new int
;
w[0][1] = 5;
w[0][2] = 15;
w[1][2] = 7;
int min[][] = new int
;
for(int i=0;i<n;i++) {
min[i][i] = 0;
}
//把所有的经过1,2,3...n个站的租金赋值
for(int r=1;r<n;r++) {
for(int i=0;i+r<n;i++) {
min[i][i+r] = w[i][i+r];
}
}
//开始比较
for(int r=2;r<=n;r++) {
for(int i=0;i+r<n;i++) {
int j = i+r;
int temp = min[i][i+1]+min[i+1][j];
if(temp < min[i][j]) {
min[i][j] = temp;
}
for(int k=i+1;k<j;k++) {
temp = min[i][k] + min[k][j];
if(temp < min[i][j]) {
min[i][j] = temp;
}
}
}
}
System.out.println("最小值为:"+min[0][n-1]);
}
}
采用动态规划
主要思想:先算出所有经过2个站的最小值,然后再算出所有经过3个站的最小值(依据于2个站的最小值),一直到n个站即可得到所求值。
package shiyansi;
public class ZhuYongYouTing {
public static void main(String []args) {
int n = 3;
int w[][] = new int
;
w[0][1] = 5;
w[0][2] = 15;
w[1][2] = 7;
int min[][] = new int
;
for(int i=0;i<n;i++) {
min[i][i] = 0;
}
//把所有的经过1,2,3...n个站的租金赋值
for(int r=1;r<n;r++) {
for(int i=0;i+r<n;i++) {
min[i][i+r] = w[i][i+r];
}
}
//开始比较
for(int r=2;r<=n;r++) {
for(int i=0;i+r<n;i++) {
int j = i+r;
int temp = min[i][i+1]+min[i+1][j];
if(temp < min[i][j]) {
min[i][j] = temp;
}
for(int k=i+1;k<j;k++) {
temp = min[i][k] + min[k][j];
if(temp < min[i][j]) {
min[i][j] = temp;
}
}
}
}
System.out.println("最小值为:"+min[0][n-1]);
}
}