题目情况:
整体思路:
1 | 2 | 3 | |
1 | 5 | 15 | |
2 | 7 | ||
3 |
1. 将数据存入数据a[i][j]中,表示从第i站到第j站的钱
2.数组dp[i]表示从第i站到第n站的钱
3.用i将数组从后向前循环,再用j循环i之后的站点
4.动态规划方程为:dp[i]=min(a[i][j]+dp[j],dp[i]);
即比较从i到j再到n和从i 直接到n的钱数
满分代码:
#include <iostream>
#include <algorithm>
using namespace std;
int a[205][205];
int dp[20000];
int main() {
int n;
cin >> n;
for (int i = 1; i < n; i++) {
for (int j = i + 1; j <= n; j++) {
cin >> a[i][j]; //a[i][j]表示从i到j的费用
}
dp[i] = 1e9;
}
for (int i = n-1; i >= 1; i--) {
for (int j = i + 1; j <= n; j++) {
dp[i] = min(dp[i], a[i][j] + dp[j]);
}
}
cout << dp[1] << endl;
}