好久没写高精了,一写0分?!
代码如下:
#include<bits/stdc++.h>
using namespace std;
int n,k;
string num,sum[40][40],dp[40][10];
string pro(string sa,string sb){
int la,lb,lc,a[1010]={0},b[1010]={0},c[2010]={0};
string sc="";
la=sa.length();
lb=sb.length();
for(int i=0;i<la;i++) a[i]=sa[la-i-1]-48;
for(int i=0;i<lb;i++) b[i]=sb[lb-i-1]-48;
for(int i=0;i<la;i++){
for(int j=0;j<lb;j++) c[i+j]+=a[i]*b[j];
}
lc=la+lb-2;
for(int i=0;i<lc;i++){
if(c[i]>9){
c[i+1]+=c[i]/10;
c[i]%=10;
}
}
if(c[lc]) lc++;
for(int i=lc-1;i>=0;i--) sc+=char(c[i]+48);
return sc;
}
string maxx(string a,string b){
if(a.length()>b.length()) return a;
else if(a.length()<b.length()) return b;
else return max(a,b);
}
int main(){
scanf("%d%d",&n,&k);
cin>>num;
for(int i=0;i<n;i++){
sum[i][i]=num[i];
for(int j=i+1;j<n;j++) sum[i][j]=sum[i][j-1]+num[j];
}
for(int i=0;i<n;i++) dp[i][0]=sum[0][i];
for(int p=1;p<=k;p++){
for(int i=p;i<n;i++){
for(int j=p-1;j<i;j++) dp[i][p]=maxx(dp[i][p],pro(dp[j][p-1],sum[j+1][i]));
}
}
cout<<dp[n-1][k];
return 0;
}