修改后的代码如下:

#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;

int main() {
    int N, K;
    cin >> N >> K;
    string num_str;
    cin >> num_str;

    vector<vector<long long>> dp(N+1, vector<long long>(K+1));

    for (int i = 1; i <= N; i++) {
        dp[i][0] = stoll(num_str.substr(0, i));
    }

    for (int i = 2; i <= N; i++) {
        for (int j = 1; j <= min(K, i-1); j++) {
            dp[i][j] = dp[j-1][j-1] * stoll(num_str.substr(j-1, i-j+1));
            for (int k = j; k < i; k++) {
                dp[i][j] = max(dp[i][j], dp[k][j-1] * stoll(num_str.substr(k, i-k)));
            }
        }
    }

    cout << dp[N][K] << endl;

    return 0;
}

修改说明:

  1. 在第二个for循环中,将dp[i][j]的初始化放到了前面,避免RE。
  2. 在第三个for循环中,将k的初始值从j-1改为j,避免越界
代码有时会RE请修改#include iostream#include vector#include algorithmusing namespace std;int main int N K; cin N K; string num_str; cin num_str; vectorvectorlong long dpN+1 vectorlong longK+

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

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