#include <bits/stdc++.h>
//#define int __uint128_t
using namespace std;
struct bigint{
int num[105]={0},len=1;
bigint operator*(const bigint b) const{
bigint c;
//memset(c.num,0,sizeof(c.num));
int len3=len+b.len+1;
for (int i=1;i<=len;i++) {
for (int j=1;j<=b.len;j++){
c.num[i + j - 1]+=num[i]*b.num[j];
}
}
/*for (int i=1;i<=len3;i++) {
cout<<c.num[i];
}
*/
for (int i=1;i<=len3;i++) {
c.num[i + 1]+=c.num[i]/10;
c.num[i]%=10;
}
c.len=len3;
return c;
}
bigint operator+(const int x) const{
bigint c;
//memset(c.num,0,sizeof(c.num));
int len3=100;
for(int i=1;i<=len3;i++){
c.num[i]=num[i];
}
c.num[1] += x;
for (int i=1;i<=len3;i++) {
c.num[i + 1] += c.num[i]/10;
c.num[i]%=10;
}
while(c.num[len3]==0&&len3>1){
len3--;
}
c.len=len3;
return c;
}
bool operator<(const bigint b) const{
if(len!=b.len){
return len<b.len;
}
for(int i=len;i>=1;i--){
if(num[i] > b.num[i]) return 0;
if(num[i] < b.num[i]) return 1;
}
}
bigint operator-(const bigint b) const{
bigint c;
//memset(c.num,0,sizeof(c.num));
int len3=max(len,b.len);
for (int i=1;i<=len3;i++) {
c.num[i] = num[i] - b.num[i];
if (c.num[i] < 0) {
c.num[i]+=10;
c.num[i + 1]-=1;
}
}
c.len=len3;
return c;
}
};
char print(bigint t) {
while (t.len!=1&&t.num[t.len]==0)t.len--;
int tlen=t.len;
while (tlen){
cout<<t.num[tlen];
tlen--;
}
return '\0';
}
bigint f[45][45];
int s[45];
int n,k;
string s1;
bigint js(int x,int y){
bigint sum;long long t=1;
//memset(sum.num,0,sizeof(sum.num));
for(int i=y;i>=x;i--){
sum=sum+s[i]*t;
t*=10;
}
return sum;
}
signed main(){
cin>>n>>k>>s1;
for(int i=0;i<s1.length();i++){
s[i+1]=s1[i]-'0';
}
//cout<<s[4]<<endl;
for(int i=1;i<=n;i++){
f[0][i]=js(1,i);
//print(f[0][i]);
//cout<<" ";
}
for(int i=1;i<=k;i++){
for(int j=1;j<=n;j++){
for(int m=j;m>=i;m--){
//(f[i-1][l-1]*js(l,j)).print();
//cout<<js(l,j).len<<" ";
//cout<<l<<" "<<j<<endl;
//cout<<" ";
//cout<<i<<" "<<j<<endl;
//cout<<print(f[i-1][m-1]*js(m,j))<<" "<<print(f[i][j])<<endl;
//cout<<print(f[i][j])<<" ";
f[i][j]=max(f[i][j],f[i-1][m-1]*js(m,j));
//cout<<print(f[i][j])<<endl;
//f[i][j].print();
//cout<<print(f[i][j])<<endl;
//cout<<"\n";
}
}
}
//for(int i=1;i<=k;i++){
//for(int j=1;j<=n;j++){
//print(f[i][j]);
//cout<<" ";
//}
//cout<<"\n";
//}
print(f[k][n]);
return 0;
}
dp是对的,上次的代码改了一下。