求助调码,悬赏3关注
查看原帖
求助调码,悬赏3关注
445650
I_never_left楼主2023/7/9 10:49
#include <bits/stdc++.h>

using namespace std;

#define ll long long 
const int N = 50;

int n, m;
int f[N][N]; //f[i][j] 表示前i位,用了j个乘号的最大值
// f[i][j] = max(f[i][j], f[j ~ i][j - 1] * a[j ~ i][i]);
int a[N][N];
char c;

int main() {
    cin >> n >> m;
    for(int i = 1; i <= n; ++ i) {
        cin >> c;
        a[i][i] = c - 48;
    }
    for(int i = 1; i <= n; ++ i) {
        for(int j = i + 1; j <= n; ++ j) {
            a[i][j] = a[i][j - 1] * 10 + a[j][j];
        }
    }

    for(int i = 1; i <= n; ++ i)
        for(int j = 1; j <= m; ++ j)
            f[i][j] = 1;
    for(int i = 1; i<= n; ++ i) {
        for(int j = 1; j < i; ++ j) {
            for(int k = j + 1; k <= i; ++ k)
                f[i][j] = max(f[i][j], f[k][j]);
            for(int k = j; k <= i; ++ k)
                f[i][j] = max(f[i][j], f[k][j - 1] * a[k + 1][i]);
            //cout << f[i][j] << ' ';
        }
        //cout << '\n';
    }

    cout << f[n][m];
    return 0;
}
2023/7/9 10:49
加载中...