题目大意:一个长度为n的数字串,加k个乘号能够得到的最大值
dp[i][j],在1~i个字符中插入j个乘号所得最大值
sum[i][j],i~j个字符组成的数字
注意:初始化dp[i][0]=sum[1][i]
#include<iostream>
#include<string.h>
#include<limits>
#include<string>
using namespace std;
int dp[41][7],sum[41][41];
int n,k;
int main()
{
string s;
int i,j,p;
cin>>n>>k;
cin>>s;
s=" "+s;
for (i=1;i<=n;i++)
for (j=1;j<=n;j++)
if (i==j)
sum[i][j]=s[i]-'0';
else
sum[i][j]=sum[i][j-1]*10+s[j]-'0';
memset(dp,0,sizeof(dp));
for (i=1;i<=n;i++)
dp[i][0]=sum[1][i];
for (i=2;i<=n;i++)
for (j=1;j<=k;j++)
for (p=1;p<i;p++)
dp[i][j]=max(dp[i][j],dp[p][j-1]*sum[p+1][i]);
cout<<dp[n][k]<<endl;
return 0;
}