问题描述:
长江游乐俱乐部在长江上设置了n个游艇出租站,游客可以在这些游艇出租站用游艇,并在下游任何一个游艇出租站归还游艇,游艇出租站i到j之间的租金是rent(i,j),其中1<=i
import java.util.Scanner;
public class Main {
private static int n;
private static int[][] cost;
private static int[][] dp;
/**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
Scanner sc=new Scanner(System.in);
n=sc.nextInt();
cost=new int[n+1][n+1];
dp=new int[n+1][n+1];
for(int i=1;i<=n-1;i++){
for(int j=i+1;j<=n;j++){
cost[i][j]=sc.nextInt();
}
}
for(int r=1;r<=n-1;r++){
for(int i=1;i<=n-1;i++){
int j=i+r;
if(j>n){
continue;
}
dp[i][j]=cost[i][j];
for(int k=i+1;k<j;k++){
dp[i][j]=Math.min(dp[i][j],dp[i][k]+dp[k][j]);
}
}
}
System.out.println(dp[1][n]);
}
}