C++ 代码优化:使用 vector 代替动态二维数组
#include
int main()
{
int N;
cin >> N;
vector<vector
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;
}
修改说明:
- 使用vector代替动态二维数组。
- 修正动态二维数组的申请和释放,避免越界问题。
- 修正t的取值范围,应该是<=i而不是<i。
- 算法实现部分没有问题,无需修改。
原文地址: https://www.cveoy.top/t/topic/oYNK 著作权归作者所有。请勿转载和采集!