求调
查看原帖
求调
1303967
lizimu0718楼主2024/12/28 20:16
#include<bits/stdc++.h>
using namespace std;
char s[45];	
int n,m;
struct bi
{
	int d[105],len=0;
	bi(){memset(d,0,sizeof(d));}
 } dp[45][10];
 bi val(int l,int r)
 {
	bi ans;
	ans.len=r+l-1;
	for(int i=r;i>=l;i--)
	{
		ans.d[r-i+1]=s[i]-'0';
	}
	return ans; 
 }
 bi mx(bi a,bi b)
 {
	if(a.len>b.len) return a;
	if(a.len<b.len) return b;
	for(int i=a.len;i>=1;i--)
	{
		if(a.d[i]>b.d[i]) return a;
		if(a.d[i]<b.d[i]) return b;
	}
	return a;
 }
 bi mal(bi a,bi b)
 {
	bi c;
	c.len=a.len+b.len-1;
	for(int i=1;i<=a.len;i++)
	{
		for(int j=1;j<=b.len;j++)
		{
			c.d[i+j-1]+=a.d[i]*b.d[i];	
		}
	}
	for(int i=1;i<=c.len;i++)
	{
		c.d[i+1]+=c.d[i]/10;
		c.d[i]%=10;
	}
	if(c.d[c.len+1]==0) c.len++;
	while(c.d[c.len]==0&&c.len>1) c.len--;
	return c;
 }
int main()
{
	cin>>n>>m>>s+1;
	for(int i=1;i<=n;i++)
	{
		dp[i][0]=val(1,i);
	}
	for(int i=1;i<=n;i++)
	{
		for(int j=1;j<=m;j++)
		{
			for(int k=j;k<i;k++)
			{
				dp[i][j]=mx(dp[i][j],mal(dp[k][j-1],val(k+1,i)));			
			}
		}
	}
	for(int i=1;i<=dp[n][m].len;i++) cout<<dp[n][m].d[i];
    return 0;
}
2024/12/28 20:16
加载中...