memory
一些三年前写的代码 现在看看确实是一些回忆
Luogu P1018
#include <bits/stdc++.h>
using namespace std;
typedef char strings[510] ;
string s;
string f[510][10];
int n,k;
string mul(string a,string b)
{
int len1,len2,k = 0 ;
len1=len2= 51 ;
int A[510],B[510],C[510] ;
for (int i= 0 ;i<len1;i++) A[i] = a[len1- i-1] - 48 ;
for (int i= 0; i<len2;i++) B[i] = b[len2- i-1] - 48 ;
memset(C,0,sizeof(C)) ;
for (int i= 0;i<len1;i++)
for (int j= 0 ;j<len2;j++) {
if (i+j>40) continue ;
C[i+j ] += A[i] * B[j] ;
}
for (int i = 0 ;i<50;i++)
{
C[i+1] += C[i] / 10 ;
C[i] = C[i] % 10 ;
}
for (int i= 0 ;i<51;i++) a[50-i] = C[i] + 48 ;
return a ;
}
string max(string a, string b)
{
return a>b?a:b ;
}
string cs(int ks,int js)
{
strings sum ;
for (int i= 0;i<51;i++) sum[i] = '0' ;sum[51] = '\0' ;
int t= 50 ;
for(int i=js;i>=ks;i--) sum[t--]=s[i] ;
return sum;
}
void write(string s)
{
int i= 0 ;
while (s[i] =='0') i++ ;
for (int j= i;j<51;j++) cout<< s[j] ;
cout<<endl;
}
int main()
{
cin>>n>>k;
cin>> s ;
for(int i=0;i<n;i++)f[i][0]=cs(0,i);
for (int i= 0 ;i<n;i++)
for (int j= 1;j<=i;j++)
for (int t= 1 ;t<=k;t++)
f[i][t] = max(f[i][t],mul(f[j-1][t-1], cs(j,i)) ) ;
write (f[n-1][k] );
}