why 90 pts ?
查看原帖
why 90 pts ?
1412938
A7F3jK9pR0xf_楼主2025/1/13 17:27

WA on #4 #11 #12 #13

#include <bits/stdc++.h>
using namespace std;
const int N = 50, K = 10, M = 510;
struct node
{
    int a[M], len;
    friend node operator * (const node &n1, const node &n2)
    {
        node n3 = (node){{0}, n1.len + n2.len - 1};
        for(int i = 1;i <= n1.len;++i)
            for(int j = 1;j <= n2.len;++j)
                n3.a[i + j - 1] += n1.a[i] * n2.a[j];
        for(int i = 1;i <= n3.len;++i)
        {
            n3.a[i + 1] += n3.a[i] / 10;
            n3.a[i] %= 10;
        }
        if(n3.a[n3.len + 1])
            n3.len++;
        return n3;
    }
    friend bool operator < (const node &n1, const node &n2)
    {
        if(n1.len != n2.len)
            return n1.len < n2.len;
        for(int i = n1.len;i >= 1;--i)
            if(n1.a[i] != n2.a[i])
                return n1.a[i] < n2.a[i];
        return false;
    }
}dp[N][N][K];
int a[N], n, k;
void print(node a)
{
    for(int i = a.len;i >= 1;--i)
        cout << a.a[i];
    cout << "\n";
}
int main()
{
    cin >> n >> k;
    for(int i = 1;i <= n;++i)
    {
        char c;
        cin >> c;
        a[i] = c - '0';
    }
    for(int i = 1;i <= n;++i)
    {
        for(int j = i;j <= n;++j)
        {
            dp[i][j][0].len = j - i + 1;
            for(int p = i;p <= j;++p)
                dp[i][j][0].a[j - p + 1] = a[p];
        }
    }
    for(int i = 1;i <= k;++i)
    {
        for(int len = 2;len <= n;++len)
        {
            for(int l = 1;l + len - 1 <= n;++l)
            {
                int r = l + len - 1;
                dp[l][r][i].len = 1;
                dp[l][r][i].a[1] = 0;
                for(int p = l;p < r;++p)
                {
                    for(int k1 = 0;k1 < i;++k1)
                    {
                        int k2 = i - k1 - 1;
                        node f = dp[l][p][k1] * dp[p+1][r][k2];
                        if(dp[l][r][i] < f)
                            dp[l][r][i] = f;
                    }
                }
            }
        }
    }
    print(dp[1][n][k]);
    return 0;
}

2025/1/13 17:27
加载中...