求调
  • 板块学术版
  • 楼主Martlet
  • 当前回复0
  • 已保存回复0
  • 发布时间2023/4/22 09:52
  • 上次更新2023/10/23 17:51:12
查看原帖
求调
543717
Martlet楼主2023/4/22 09:52

题目链接

#include<bits/stdc++.h>
using namespace std;
string f[101][101],s;
int m[1001],n[1001],c[1001];
string gets(int l,int r){
	return s.substr(l,r-l+1);
}
string mul(string a,string b){
    int lena=a.size(),lenb=b.size(),x;
    for(int i=1;i<=lena;i++)
        m[i]=a[lena-i]-'0';
    for(int i=1;i<=lenb;i++)
        n[i]=b[lenb-i]-'0';
    for(int i=1;i<=lena+lenb;i++)
    	c[i]=0;
    for(int i=1;i<=lenb;i++){
        x=0;
        for(int j=1;j<=lena;j++){
            c[i+j-1]+=m[j]*n[i]+x;
            x=c[i+j-1]/10;
            c[i+j-1]%=10;
        }
        c[i+lena]=x;
    }
    string k;
    bool p=0;
    for(int i=lena+lenb;i>0;i--)
        if(c[i]!=0){
            for(int j=i;j>0;j--){
                k+=c[j]+48;
            }
            p=1;
            break;
        }
    if(p==0)
        return "0";
    return k;
}
int main(){
    int n,k;
    cin>>n>>k;
    cin>>s;
    s = " "+s;
    for(int i = 1;i <= n;i++){
    	f[i][0] = gets(1,i);
	}
    for(int i = 1;i <= n;i++){
    	for(int j = 1;j <= k;j++){
    		for(int d = 1;d <= i;d++){
    			f[i][j] = max(f[i][j],mul(f[d][j-1],gets(d+1,i)));
			}
		}
	}
	cout<<f[n][k];
} 
2023/4/22 09:52
加载中...