我也求助20分
```cpp
#include <cstdio>
#include <algorithm>
using namespace std;
int i,j,l,p,n,k,a[41],f[41] [7],maxf;
long long t,maxt;
char s[41];
int main()
{
scanf("%d%d",&n,&k);
for(i=1;i<=n;i++)
{
scanf(" %c",&s[i]);
a[i]=s[i]-'0';
}
for(i=0;i<=k+1;i++)
f[0][i]=1;
for(t=0,i=1;i<=n;i++)
{
t=t*10+a[i];
f[i][1]=t;
}
for(i=1;i<=n;i++)
for(j=2;j<=k+1;j++)
{
for(maxt=0,l=i-1;l>=j-1;l--)
{
for(t=0,p=l+1;p<=i;p++)
t=t*10+a[p];
if(f[l][j-1]*t>maxt)
maxt=f[l][j-1]*t;
}
f[i][j]=maxt;
}
printf("%d",f[n][k+1]);
return 0;
}
```
by Mutsumi_0114 @ 2018-01-26 23:04:47
我也20分
```cpp
#include<bits/stdc++.h>
using namespace std;const int maxn=101;long long n,k;char s[maxn]; long long sum[maxn][maxn],f[maxn][maxn];
int main(){
cin>>n>>k;for(int i=1;i<=n;i++)cin>>s[i];
for(int i=1;i<=n;i++)sum[i][i]=s[i]^48;for(int i=1;i<n;i++)for(int j=i+1;j<=n;j++)sum[i][j]=sum[i][j-1]*10+(s[j]^48);
// for(int i=1;i<=n;i++)for(int j=i;j<=n;j++)cout<<sum[i][j]<<'\n';
for(int i=1;i<=n;i++)f[i][0]=sum[1][i];
for(int i=1;i<=k;i++)for(int j=i+1;j<=n;j++)for(int q=i;q<j;q++)f[j][i]=max(f[j][i],f[q][i-1]*sum[q+1][j]);
printf("%d\n",f[n][k]);
}
```
by 赵灵儿 @ 2018-03-22 11:35:57
```cpp
#include<cstdio>
#include<cstring>
#include<algorithm>
using namespace std;
#define Fast register
#define read(s) scanf("%d",&s)
#define write(s) printf("%d",s)
#define max(a,b) a<b?b:a
const int maxn=1e5+6;
const int inf=0x3f3f3fll;
char buf[1<<14];
struct big{
int s[2333],len;
big(){memset(s,0,sizeof(s));len=1;}
inline void del_0()
{
while(len>1&&s[len]==0) len--;
return;
}
inline void In()
{
char ptr[2333];
scanf("%s",ptr);
len=strlen(ptr);
for(Fast int i=1;i<=len;i++)
s[i]=ptr[len-i]-48;
return;
}
inline void Out()
{
for(Fast int i=len;i>0;i--)
printf("%d",s[i]);
// putchar('\n');
return;
}
bool operator<(const big&r) const
{
if(len!=r.len) return len<r.len;
for(Fast int i=len;i>0;i--)
{
if(s[i]<r.s[i]) return 1;
else if(s[i]>s[i]) return 0;
}
return 0;
}
inline void push(Fast int r)
{
len=0;
memset(s,0,sizeof(s));
for(Fast int i=r;i>0;i/=10)
s[++len]=i%10;
del_0();
return;
}
big operator*(const big&r) const
{
big res;
res.len=len+r.len+23;
for(Fast int i=1;i<=len;i++)
for(Fast int j=1;j<=r.len;j++)
res.s[i+j-1]=s[i]*r.s[j];
for(Fast int k=1;k<=res.len;k++)
{
res.s[k+1]+=res.s[k]/10;
res.s[k]%=10;
}
if(res.s[res.len+1]>0) res.len++;
res.del_0();
return res;
}
}dp[50][50],a,b;
int n,data[233],k;
char ch[233];
big get_int(Fast int l,Fast int r)
{
big res;
res.len--;
for(Fast int i=r;i>=l;i--)
res.s[++res.len]=data[i];
res.del_0();
return res;
}
int main()
{
read(n),read(k);
scanf("%s",ch);
for(Fast int i=1;i<=n;i++)
data[i]=ch[i-1]-48;
//write(n),putchar(32),write(k),putchar(10);
for(Fast int i=1;i<=n;i++)
dp[i][0]=get_int(1,i);
for(Fast int i=1;i<=n;i++)
{
for(Fast int j=1;j<=min(i-1,k);j++)
{
for(Fast int t=j;t<j;t++)
dp[i][j]=max(dp[i][j],dp[i][j-1]*get_int(t+1,i));
}
}
for(Fast int i=0;i<=n;i++)
{
for(Fast int j=0;i<=k;i++)
dp[i][j].Out();
putchar(32);
}
dp[n][k].Out();
return 0;
}
```
by Explorer_CYC @ 2018-04-22 16:25:19
要写高精度的
by XeCtera @ 2018-04-29 20:48:17
我把类型开到极限也只有50分
by XeCtera @ 2018-04-29 20:48:58
我也20分
#include<iostream>
#include<iomanip>
#include<cmath>
#include<string>
#include<cstring>
#include<cstdio>
#include<algorithm>
using namespace std;
int s[1005][1005],f[1005][1005];
char a[1005];
int N,K;
void ddd()
{
for(int i=1;i<=N;i++)
for(int j=i;j<=N;j++)
s[i][j]=s[i][j-1]*10+a[j]-'0';
for(int i=1;i<=N;i++)
f[i][0]=s[1][i];
/*for(int i=1;i<=N;i++)
{
for(int j=i;j<=N;j++)
cout<<s[i][j]<<" ";
cout<<endl;
}*/
}
int main()
{
cin>>N>>K;
for(int i=1;i<=N;i++)cin>>a[i];
ddd();
for(int k=1;k<=K;k++)
for(int i=1;i<=N;i++)
for(int j=0;j<=i-1;j++)
f[i][k]=max(f[i][k],f[j][k-1]*s[j+1][i]);
cout<<f[N][K];
return 0;
}
by bs2019lixuheng @ 2018-05-03 19:39:22