最大K乘积问题
算法步骤:
f[i][j]:表示把前j个数字分割为i段的最大乘积值
f[i][j]=max{f[i-1][i-1--->j-1};
#include <iostream>
#include<algorithm>
using namespace std;
//返回从left到right之间的十进制数
int getNum(string num,int left,int right){
string s = "";
for(int i=left;i<=right;i++){
s+=num[i-1];
}
return atoi(s.c_str());
}
//n表示整个数的位数,k代表要求分为的段数
int getMax(int n,int k,string num){
int f[k+1][n+1];
//初始化
for(int i=1;i<=n;i++){
f[1][i]=getNum(num,1,i);
}
for(int i=2;i<=k;i++)
for(int j=i;j<=n;j++){
f[i][j]=f[i-1][i-1];
for(int m=i-1;m<=j-1;m++)
f[i][j]=max(f[i][j],f[i-1][m]*getNum(num,m+1,j));
}
return f[k][n];
}
int main()
{
cout<<getMax(3,2,"322");
return 0;
}