自己测试就能过,一上传就全WA
救救蒟蒻吧!!!
代码如下:
#include<iostream>
#include<cstring>
#define mod 10
using namespace std;
int N,K;
struct v{
int n;
int a[41];
v(int val=0){
memset(a,0,sizeof(a));
for(n=1;val!=0;++n){
a[n]+=val%mod;
a[n+1]=val/mod;
val/=mod;
}--n;
}
v(const v& val):n(val.n){
for(int i=1;i<=n;++i){
a[i]=val.a[i];
}
}
bool operator<(const v& val){
if(n<val.n){
return true;
}else if(n>val.n){
return false;
}
for(int i=n;i>0;--i){
if(a[i]<val.a[i]){
return true;
}else if(a[i]>val.a[i]){
return false;
}
}
return false;
}
v operator*(const v& val){
v res;
res.n=val.n+n-1;
for(int i=1;i<=n;++i){
for(int j=1;j<=val.n;++j){
res.a[i+j-1]+=a[i]*val.a[j];
}
}
for(int i=1;i<=res.n;++i){
res.a[i+1]+=res.a[i]/mod;
res.a[i]%=mod;
}
if(res.a[res.n+1]){
++res.n;
}
return res;
}
void getin(){
n=N;
for(int i=n;i>0;--i){
a[i]=getchar()-'0';
}
}
v getnum(const int& i,const int& j){
v res;
res.n=j-i+1;
for(int k=1;k<=res.n;++k){
res.a[k]=a[i+k-1];
}
return res;
}
void print(){
int cnt=n;
printf("%d",a[cnt--]);
while(cnt>0){
printf("%d",a[cnt--]);
}
}
}str,f[41][41];
int main(){
scanf("%d%d",&N,&K);
getchar();
str.getin();
for(int i=1;i<=N;++i){
f[i][0]=str.getnum(1,i);
}
for(int i=1;i<=N;++i){
for(int j=1;j<=i+1;++j){
for(int k=1;k<=i-1;++k){
f[i][j]=f[i][j]<(f[k][j-1]*str.getnum(k+1,i))?(f[k][j-1]*str.getnum(k+1,i)):f[i][j];
}
}
}
f[N][K].print();
return 0;
}