全部RE,求助大佬
查看原帖
全部RE,求助大佬
1319442
Allen_Cheng楼主2024/7/17 19:08
#include <iostream>
using namespace std;

const long long N = 1e11;
long long a[1020],x[1020]; //a前缀和,x读入
long long n, m, maxn = -N, minn = N;
long long f1[120][120][12],f2[120][12][12]; //f1最小,f2最大

int main()
{
    cin >> n >> m;
    for (int i = 1; i <= 120; i++)
        for (int j = 1; j <= 120; j++)
            for (int k = 1; k <= 20; k++)
                f1[i][j][k] = N, f2[i][j][k] = -N;
    for (int i = 1; i <= n; i++)
        cin >> x[i], a[i] = a[i - 1] + x[i];
    for (int i = n + 1; i <= 2 * n ; i++)
        a[i] = a[i - 1] + x[i - n];
    for (int i = 1; i <= n; i++)
        for (int j = 1; j <= n; j++)
            f1[i][j][1] = f2[i][j][1] = (a[j] - a[i - 1] + N) % 10;
    for (int i = 1; i <= 2 * n; i++)
        for (int j = i + 1; j <= 2 * n; j++)
            for (int l = 2; l <= m; l++)
                for (int k = i; k < j; k++)
                    f1[i][j][l] = min(f1[i][j][l], f1[i][k][l - 1] * f1[k + 1][j][1]), f2[i][j][l] = max(f2[i][j][l], f2[i][k][l - 1] * f2[k + 1][j][1]);
    for (int i = 1; i <= n; i++)
        maxn = max(maxn, f2[i][i + n - 1][m]), minn = min(minn, f1[i][i + n - 1][m]);
    printf("%d\n%d", minn, maxn);
    return 0;
}
2024/7/17 19:08
加载中...