为了快速求调,我决定调完就弄粉福
代码
#include <iostream>
#include <algorithm>
#include <cmath>
#include <vector>
#define int long long
#define short unsigned long long
using namespace std;
string a;
int n,k;
short dp[80][10][160]={};
vector<short> tmp(80);
bool flag;
signed main(){
cin>>n>>k>>a;
for(int i=0;i<n;i++){
for(int j=0;j<=k;j++){
if(j==0){
for(int l=0;l<=i;l++){
dp[i][j][l]=a[l];
}
}
else if(j>i){}
else{
for(int l=0;l<i;l++){
//tmp.clear();
for(int c1=0;c1<80;c1++){
for(int c2=c1+l+1;c2<c1+i+1;c2++){
tmp[c1+c2]=dp[l][j-1][c1]*(a[c2]-'0');
}
}
for(int c1=1;c1<80;c1++){
tmp[c1]+=tmp[c1-1]/10;
tmp[c1-1]%=10;
}
for(int c1=80;c1>=0;c1--){
if(tmp[c1]<dp[i][j][c1]){
break;
}
if(tmp[c1]>dp[i][j][c1]){
flag=1;
break;
}
}
if(flag){
for(int c1=0;c1<80;c1++){
dp[i][j][c1]=tmp[c1];
}
}
//dp[i][j]=max(dp[i][j],dp[l][j-1]*getint(l+1,i));
}
}
//int128put(dp[i][j]);
//cout<<" ";
}
//cout<<endl;
}
//long long ans=dp[n-1][k-1];
//cout<<ans<<endl;
flag=0;
for(int i=79;i>=0;i--){
if(dp[n-1][k][i]){
flag=1;
}
if(flag){
cout<<dp[n-1][k][i];
}
}
return 0;
}