11、12、13WA 了
查看原帖
11、12、13WA 了
1374789
2028yangguangzhi楼主2024/10/13 11:58
#include<cstdio>
using namespace std;
int a[50] = {0};
char s[50] = {'\0'};
struct node
{
	int v = 0;
	bool exi = false;
	int c[50] = {0};
};
struct node ans[50] = {},cut[50][10] = {};
node culc(int,int);
node mul(node,node);
node Max(node,node);
int main()
{
	int k = 0,n = 0;
	scanf("%d %d",&n,&k);
	scanf("%s",s);
	for(int i = 0;i < n;i++)
	{
		a[i + 1] = s[i] - '0';
	}
	for(int i = 1;i <= n;i++)
	{
	    ans[i].exi = false;
	    for(int j = 1;j <= k;j++)
	    {
	        cut[i][j].exi = false;
        }
    }
    for(int i = 1;i < n;i++)
    {
        cut[i][1] = culc(1,i);
        for(int j = 2;j <= k;j++)
        {
            for(int fr = j - 1;fr < i;fr++)
            {
                if(cut[fr][j - 1].exi)
                {
                    cut[i][j] = Max(cut[i][j],mul(cut[fr][j - 1],culc(fr + 1,i)));
                }
            }
        }
        if(cut[i][k].exi)
        {
            ans[i] = mul(cut[i][k],culc(i + 1,n));
        }
    }
    node lastans;
    lastans.exi = false;
    for(int i = 1;i < n;i++)
    {
        node tmp = Max(ans[i],lastans);
        lastans = tmp;
    }
    for(int i = lastans.v;i >= 1;i--)
    {
        printf("%d",lastans.c[i]);
    }
    return 0;
}
node culc(int l,int r)
{
	node e;
	e.v = r - l + 1;
	e.exi = true;
	for(int i = 1;i <= e.v;i++)
	{
	    e.c[i] = a[r - i + 1];
    }
    return e;
}
node mul(node e1,node e2)
{
	node emul;
	emul.exi = true;
	emul.v = e1.v + e2.v - 1;
	for(int i = 1;i <= emul.v;i++)
	{
	    emul.c[i] = 0;
    }
    for(int i = 1;i <= e1.v;i++)
    {
        for(int j = 1;j <= e2.v;j++)
        {
            emul.c[i + j - 1] += e1.c[i] * e2.c[j];
        }
    }
    int q = 0;
    for(int i = 1;i <= emul.v;i++)
    {
        emul.c[i] += q;
        q = emul.c[i] / 10;
        emul.c[i] %= 10;
    }
    while(q > 0)
    {
        emul.c[++emul.v] = q % 10;
        q /= 10;
    }
    return emul;
}
node Max(node e1,node e2)
{
	if((!e1.exi or e1.v < e2.v))
	{
	    return e2;
    }
    if((!e2.exi or e2.v < e1.v))
	{
	    return e2;
    }
    for(int i = e1.v;i >= 1;i--)
    {
        if(e1.c[i] > e2.c[i])
        {
            return e1;
        }
        else if(e2.c[i] > e1.c[i])
        {
            return e2;
        }
    }
    return e1;
}
2024/10/13 11:58
加载中...