建议跟着我的代码自己打个表就懂了
#include<iostream>
using namespace std;
int n;
int t[205][205];//时间
int dp[205];//dp数组
int w[205][205];从i到j的时间
int main(){
cin >> n;
int i,j;
for(i = 1; i <= n-1; ++i){//赋值
for(j = i+1;j <= n; ++j){
cin >> t[i][j];
}
} for(i = 2; i <= n; ++i){//从2开始将dp数组赋值10000000,方便比较大小
dp[i] = 10000000;
}
for(i = 1; i <= n-1; ++i){
for(j = i+1;j <= n; ++j){
w[i][j] = dp[i] + t[i][j];//dp[i]是到i港口所用最短时间,加上从i港口到j港口的时间
dp[j] = min(dp[j],w[i][j]);//取最小值,到j港口的最小时间
}
}
cout << dp[n];//输出
return 0;
}