1 条题解

  • 0
    @ 2023-10-25 20:12:51

    #include <stdio.h> #include <stdlib.h> #define MAX_N 80 int max(int a, int b) { return a > b ? a : b; } int main() { int n; int tower[MAX_N][MAX_N]; scanf("%d", &n); for (int i = 0; i < n; i++) { for (int j = 0; j <= i; j++) { scanf("%d", &tower[i][j]); } } int dp[MAX_N][MAX_N]; for (int i = 0; i < n; i++) { dp[n-1][i] = tower[n-1][i]; } for (int i = n-2; i >= 0; i--) { for (int j = 0; j <= i; j++) { dp[i][j] = max(dp[i+1][j], dp[i+1][j+1]) + tower[i][j]; } } int path[MAX_N]; int cur = 0; path[cur++] = tower[0][0]; int x = 0, y = 0; while (cur < n) { if (dp[x+1][y] > dp[x+1][y+1]) { path[cur++] = tower[x+1][y]; x++; } else { path[cur++] = tower[x+1][y+1]; x++; y++; } } printf("%d\n", dp[0][0]); for (int i = 0; i < n; i++) { printf("%d ", path[i]); } printf("\n"); return 0; }

    • 1

    信息

    ID
    252
    时间
    1000ms
    内存
    512MiB
    难度
    6
    标签
    递交数
    32
    已通过
    11
    上传者