2 条题解

  • 2
    @ 2025-11-22 22:03:51

    #include<bits/stdc++.h> using namespace std; int main() { int n; cin >> n; // 租金矩阵 vector<vector> r(n + 1, vector(n + 1, 0)); for (int i = 1; i < n; i++) { for (int j = i + 1; j <= n; j++) { cin >> r[i][j]; } } // dp[i]--从1到i的minn vector dp(n + 1, INT_MAX); dp[1] = 0; // 初始化 for (int i = 2; i <= n; i++) { // 1.直达 if (r[1][i] != 0) { dp[i] = min(dp[i], r[1][i]); } // 2.中转 for (int k = 2; k < i; k++) { // 检查是否存在 if (r[1][k] != 0 && r[k][i] != 0) { dp[i] = min(dp[i], r[1][k] + r[k][i]); } } } cout << dp[n]; return 0; }

    由于仅能中转一次,所以分类讨论中转/直达两种方法,然后就直接模板收割

    信息

    ID
    2827
    时间
    1000ms
    内存
    256MiB
    难度
    1
    标签
    (无)
    递交数
    24
    已通过
    47
    上传者