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] );
}