1 条题解

  • 0
    @ 2024-9-6 11:49:11
    #include<bits/stdc++.h>
    using namespace std;
    const int N = 105;
    int a[N][N], c[N], dp[N];//f[i]第i个点到终点的最小花费
    int main(){
        int n, t = 0;
        cin>>n;
        for(int i=0; i<n; i++)
            for(int j=0; j<n; j++)
                cin>>a[i][j];
        for(int i=0; i<n-1; i++) dp[i] = N*N*N;
        dp[n-1] = 0,c[n-1] = 0;
        for(int i=n-2; i>=0; i--){//倒着向前找
            for(int j=i+1; j<n; j++)
                if(a[i][j] && a[i][j] + dp[j] < dp[i]){
                    dp[i] = a[i][j] + dp[j];
                    c[i] = j;//从i到j的最小花费点
                }
        }
        printf("minlong=%d\n%d", dp[0], 1);
        while(c[t]) {
            printf(" %d", c[t]+1);
            t = c[t];
        }
        return 0;
    }
    
    
    • 1

    信息

    ID
    739
    时间
    1000ms
    内存
    256MiB
    难度
    5
    标签
    递交数
    29
    已通过
    13
    上传者