题目描述
给一个长度为 n的数字串,只包含数字0-9,现在让你在这个串中间插入 k 个乘号,
将数字串分为k+1 个部分,使得这k+1个数字的乘积最大。
输入
字符串 k
输出
乘法结果
示例
312 1
62
解题思路
p【m】【n】表示前m个字符中插入n个乘号的最大值,p【m+1】【n】=max{p【i】【n】+num(i+1,n)},相当于在i和i+1之间插入了一个乘号
#include<iostream>
#include<string>
#include<stdlib.h>
using namespace std;
typedef long long int LL;
const LL INF=-100000;
int main()
{
string s;
cin>>s;
int k;
cin>>k;
LL p[s.length()+1][k+1]={0};
for (int i=1;i<=s.length();++i)
{
p[i][0]=atoi(s.substr(0,i).c_str());
}
for (int m=1;m<=s.length();++m)
{
for (int n=1;n<=k;++n)
{
cout<<"m="<<m<<"n="<<n<<" "<<p[m][n]<<endl;
if (n>m-1)
p[m][n]=INF;
else{
for (int i=n;i<=m-1;++i){
if (p[m][n]<p[i][n-1]+atoi(s.substr(i,m-1).c_str()))
{
p[m][n]=p[i][n-1]+atoi(s.substr(i,m-1).c_str());
}
}
cout<<"m="<<m<<"n="<<n<<" "<<p[m][n]<<endl;
}
}
}
cout<<p[s.length()][k]<<endl;
}