本文共 690 字,大约阅读时间需要 2 分钟。
算法步骤:
f[i][j]:表示把前j个数字分割为i段的最大乘积值f[i][j]=max{ f[i-1][i-1--->j-1};
#include#include 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<
转载地址:http://fvlzi.baihongyu.com/