疑问
查看原帖
疑问
706290
Unino楼主2023/9/9 21:24
for (int k = i; k < j; k++) {
    if (op[k] == 't') {
        dp[i][j][0] = max(dp[i][j][0], dp[i][k][0] + dp[k + 1][j][0]);
        dp[i][j][1] = min(dp[i][j][1], dp[i][k][1] + dp[k + 1][j][1]);
    } else {
        dp[i][j][0] = max(dp[i][j][0], max(dp[i][k][1] * dp[k + 1][j][1], dp[i][k][0] * dp[k + 1][j][0]));
        dp[i][j][1] = min(dp[i][j][1], min(dp[i][k][1] * dp[k + 1][j][1], min(dp[i][k][0] * dp[k + 1][j][0], min(dp[i][k][1] * dp[k + 1][j][0], dp[i][k][0] * dp[k + 1][j][1]))));
    }
}
for (int k = i + 1; k <= j; k++) {
    if (op[k] == 't') {
        dp[i][j][0] = max(dp[i][j][0], dp[i][k - 1][0] + dp[k][j][0]);
        dp[i][j][1] = min(dp[i][j][1], dp[i][k - 1][1] + dp[k][j][1]);
    } else {
        dp[i][j][0] = max(dp[i][j][0], max(dp[i][k - 1][1] * dp[k][j][1], dp[i][k - 1][0] * dp[k][j][0]));
        dp[i][j][1] = min(dp[i][j][1], min(dp[i][k - 1][1] * dp[k][j][1], min(dp[i][k - 1][0] * dp[k][j][0], min(dp[i][k - 1][1] * dp[k][j][0], dp[i][k - 1][0] * dp[k][j][1]))));
    }
}

第一个里两个子区间是 [i,k][i,k] 和 [k+1,j][k+1,j],k∈[i,j)k \in [i,j)。第二个里两个子区间是 [i,k−1][i,k-1] 和 [k,j][k,j],k∈(i,j]k \in (i,j]。为什么第一个会 WA\sf WA 第二个能 AC\sf AC。/yiw

2023/9/9 21:24
加载中...