全WA了,一片红,手写结构体做的。 调了一晚上。
#include <bits/stdc++.h>
using namespace std;
struct bigint {
int len = 1;
int num[100] = {0};
bigint &operator=(long long t) {
int i=0;
while(t) {
num[i++]=t%10;
t/=10;
}
len=i;
return *this;
}
int operator[](int i) const {
return num[i];
}
bigint &operator=(string t) {
len = t.length();
for (int i = 0; i < (int)t.length(); i++) {
num[i] = t[len - i - 1] - '0';
// cout<<1;
}
return *this;
}
void print() {
for (int i = len - 1; i >= 0; i--) cout << num[i];
}
bool operator==(const bigint t) const {
if (len != t.len) return 0;
for (int i = 0; i < len; i++) {
if (num[i] != t[i]) {
return 0;
}
}
return 1;
}
bool operator<(const bigint t) const{
if (len != t.len) return len < t.len;
for (int i = 0; i < len; i++) {
return num[i] < t[i];
}
}
bool operator>(const bigint t) const{
if (len != t.len) return len > t.len;
for (int i = 0; i < len; i++) {
return num[i] > t[i];
}
}
bigint operator*(const bigint &b) {
int len3 = len + b.len;
bigint c;
c.len = len3;
for (int i = 0; i < len; i++) {
for (int j = 0; j < b.len; j++) {
c.num[i + j] += num[i] * b[j];
}
}
// c.print();
for (int i = 0; i < len3; i++) {
c.num[i + 1] += c.num[i] / 10;
c.num[i] = c.num[i] % 10;
}
while (1) {
if (c[len3 - 1] || len3 == 1) break;
len3--;
}
c.len = len3;
return c;
}
bigint operator+(const bigint &b) {
bigint c;
int len3=max(len,b.len);
int jin = 0;
for (int i = 0; i <= len3 - 1; i++) {
c.num[i] = num[i] + b[i] + jin;
if (c[i] > 9) {
c.num[i + 1] += c.num[i] - 9;
c.num[i] -= 10;
jin = 1;
} else {
jin = 0;
}
}
c.len=len3;
return c;
}
bigint operator-(const bigint &b) {
bigint c;
int len3 = max(len,b.len);
int jie = 0;
for (int i = 0; i < len3; i++) {
c.num[i] = num[i]-b[i]-jie;
if(c.num[i] < 0) {
jie =1;
c.num[i] += 10;
} else {
jie = 0 ;
}
}
while(1) {
if(c.num[len3-1]!=0||len3==1) {
break;
}
len3--;
}
c.len=len3;
return c;
}
bigint operator+(const int &b) {
bigint x;
x=b;
return *this+x;
}
bigint operator-(const int &b) {
bigint x;
x=b;
return *this-x;
}
bigint operator*(const int &b) {
bigint x;
x=b;
return *this*x;
}
};
bigint f[45][45];
int s[45];
int n,k;
string s1;
bigint js(int x,int y){
bigint sum;int t=1;
sum=0;
for(int i=y;i>=x;i--){
sum=sum+s[i]*t;
t*=10;
}
return sum;
}
int 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);
//cout<<endl;
}
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;
f[i][j]=max(f[i][j],f[i-1][m-1]*js(m,j));
//f[i][j].print();
//cout<<"\n";
}
}
}
f[k][n].print();
return 0;
}