2 条题解

  • 0
    @ 2025-7-25 9:36:07
    using namespace std;
    
    const int N = 200 + 10;
    int n, arr[N], dp[N], x, y, maxx, id;
    bool v[N][N];
    int fa[N];
    
    bool flag;
    void f(int x) {
        if (fa[x]) f(fa[x]);
        if (flag) cout << "-";
        else flag = 1;
        cout << x;
    }
    
    int main() {
        cin >> n;
        for (int i = 1; i <= n; i++) {
            cin >> arr[i];
            dp[i] = arr[i];
        }
    
        while (cin >> x >> y) {
            if (x == 0 && y == 0) {
                break;
            }
            v[x][y] = 1;
        }
    
        for (int i = 1; i <= n; i++) {
            for (int j = 1; j < i; j++) {
                if (v[j][i] && dp[i] < dp[j] + arr[i]) {
                    dp[i] = dp[j] + arr[i];
                    fa[i] = j;
                }
            }
            if (maxx < dp[i]) {
                maxx = dp[i];
                id = i;
            }
        }
    
        f(id);
        cout << endl << maxx;
        return 0;
    }
    
    

    信息

    ID
    2965
    时间
    1000ms
    内存
    256MiB
    难度
    3
    标签
    递交数
    204
    已通过
    68
    上传者