观察两份代码:
A(40points):
for (int p = 1; p < n; p++) {
for (int i = 1; i<=n; i++) {
int j = i + p;
hp[i][j] = hp[i][j - 1] + h[j];
for (int k = i; k < j; k++) {
ma[i][j] = max(ma[i][j], ma[i][k] + ma[k + 1][j] + hp[i][j]);
mi[i][j] = min(mi[i][j], mi[i][k] + mi[k + 1][j] + hp[i][j]);
}
}
}
B(100points):
for (int p = 1; p < n; p++) {
for (int i = 1; p+i<n*2; i++) {
int j = i + p;
hp[i][j] = hp[i][j - 1] + h[j];
for (int k = i; k < j; k++) {
ma[i][j] = max(ma[i][j], ma[i][k] + ma[k + 1][j] + hp[i][j]);
mi[i][j] = min(mi[i][j], mi[i][k] + mi[k + 1][j] + hp[i][j]);
}
}
}
循环中止条件应当是p+i<n*2
为什么捏?有大佬解惑咩。