#include #include using namespace std;

int main() { int N; cin >> N; vector<vector> V(N, vector(N)); vector<vector> dp(N, vector(N));

for (int i = 0; i < N; i++) {
    for (int t = 0; t <= i; t++) {
        cin >> V[i][t];
    }
}

dp[0][0] = V[0][0];

if (N % 2 != 0) {
    for (int i = 1; i < N; i++) {
        for (int t = 0; t <= i; t++) {
            if (t == 0) {
                dp[i][t] = dp[i - 1][t] + V[i][t];
            }
            else if (t == i) {
                dp[i][t] = dp[i - 1][t - 1] + V[i][t];
            }
            else {
                dp[i][t] = max(dp[i - 1][t] + V[i][t], dp[i - 1][t - 1] + V[i][t]);
            }
        }
    }
    cout << dp[N - 1][N / 2];
}
else {
    for (int i = 1; i < N; i++) {
        for (int t = 0; t <= i; t++) {
            if (t == 0) {
                dp[i][t] = dp[i - 1][t] + V[i][t];
            }
            else if (t == i) {
                dp[i][t] = dp[i - 1][t - 1] - V[i][t];
            }
            else {
                dp[i][t] = max(dp[i - 1][t] + V[i][t], dp[i - 1][t - 1] + V[i][t]);
            }
        }
    }
    cout << max(dp[N - 1][N / 2], dp[N - 1][N / 2 - 1]);
}

return 0;

}

修改说明:

  1. 使用vector代替动态二维数组。
  2. 修正动态二维数组的申请和释放,避免越界问题。
  3. 修正t的取值范围,应该是<=i而不是<i。
  4. 算法实现部分没有问题,无需修改。

原文地址: https://www.cveoy.top/t/topic/oYNK 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录