Rt,本来六十,套完高精度后全WA了,求助QwQ.
没加高精度:
#include<bits/stdc++.h>
using namespace std;
long long f[1000][1000],n,k;
string s;
long long ff(int s1,int s2){
long long num=0,t=1;
for(int i=s2;i>=s1;i--){
num+=(s[i]-48)*t;
t*=10;
}
return num;
}
int main(){
cin>>n>>k>>s;
for(int i=0;i<n;i++){
f[0][i]=ff(0,i);
}
for(int i=1;i<=k;i++){
for(int j=1;j<n;j++){
for(int l=j;l>=i;l--){
//cout<<f[i-1][l-1]<<"*"<<ff(l,j)<<"="<<f[i-1][l-1]*ff(l,j)<<endl;
f[i][j]=max(f[i-1][l-1]*ff(l,j),f[i][j]);
}
}
}
cout<<f[k][n-1];
}
加完高精度:
#include<bits/stdc++.h>
using namespace std;
#define int long long
int f[1000][1000][90],n,k,len[1000][1000];
string s;
void init(int a[],int l,int r){
int pos=r-l;
for(int j=l;j<=r;j++){
a[pos]=s[j]-'0';
pos--;
}
return;
}
bool cmp(int a[],int b[]){
for(int i=89;i>=0;i--){
if(a[i]&&(!b[i])){
return true;
}else if((!a[i])&&b[i]){
return false;
}else if(a[i]>b[i]){
return true;
}else if(a[i]<b[i]){
return false;
}
}
return true;
}
void copy(int a[],int b[]){
for(int i=0;i<90;i++){
b[i]=a[i];
}
return;
}
signed main(){
cin>>n>>k>>s;
for(int i=0;i<1000;i++){
for(int j=0;j<1000;j++){
len[i][j]=1;
}
}
for(int i=0;i<n;i++){
init(f[0][i],0,i);
len[0][i]=i+1;
}
for(int i=1;i<=k;i++){
for(int j=1;j<n;j++){
for(int l=j;l>=i;l--){
int a[45]={},res[90]={};
init(a,l,j);
for(int x=0;x<j-l+1;x++){
for(int y=0;y<len[i-1][l-1];y++){
res[x+y]+=a[x]*f[i-1][l-1][y];
}
}
int pl=len[i-1][l-1]+j-l;
for(int i2=0;i2<pl;i2++){
if(res[i2]>=10){
res[i2+1]+=res[i2]/10;
res[i2]%=10;
if(i2==pl-1){
pl++;
}
}
}
// for(int y=len[i-1][l-1]-1;y>=0;y--){
// cout<<f[i-1][l-1][y];
// }
// cout<<"*";
// for(int x=j-l;x>=0;x--){
// cout<<a[x];
// }
// cout<<"=";
// for(int i2=pl-1;i2>=0;i2--){
// cout<<res[i2];
// }
// cout<<endl;
if(cmp(res,f[i][j])){
copy(res,f[i][j]);
}
//f[i][j]=max(f[i-1][l-1]*ff(l,j),f[i][j]);
}
}
}
int ff=1;
for(int i=85;i>=0;i--){
if(ff&&(!f[k][n-1][i])){
continue;
}
ff=1;
cout<<f[k][n-1][i];
}
}