加个记忆化呀。 我也是递归写的。 int a[1030][1030], n, mem[1030][1030]; int f(int i, int j) {     if (i == n) return a[i][j];     if (mem[i][j] != -1) return mem[i][j];     return mem[i][j] = max(f(i+1, j), f(i+1, j+1)) + a[i][j]; } int main() {     memset(mem, -1, sizeof(mem));     cin >> n;     for (int i = 1; i <= n; ++i) {         for (int j = 1; j <= i; ++j)             cin >> a[i][j];     }     cout << f(1, 1);     return 0; }