算法:C++ 实现最大k乘积
概念解释:
最大k乘积:将长度为N的数字划分为k段所组成的十进制数的最大乘积
例如:将 123 划分为2段的最大乘积为:max = 12*3
算法思想:
动态规划
算法要求:
从input.txt中读取n和k值,以及数字段:
5 3
12345
n = 5表示数字长度为5,k=3,表示将数字划分为3段
待划分的数字段为12345将求解的最大k乘积写入文件output.txt
最大K乘积求解思路:
个人感觉不好理解,每次跟同学将解 的时候都蛮吃力,其实仔细琢磨,聪明的你一定会看明白。
首先我们采用m[i][j]二维数组来表示将第1 ~ 第个i个数字划分为j段的最大k乘积。
用c[i+1][j]二维数组来表示从i+1到j这段数字所表示的十进制数,例如数字56712:c[2][3]就表示数字67。
利用动态规划的思想:最大k乘积m[n][k] = max{m[i][k-1] * c[i+1][n] }。很显然,如果当k等于1时,最大k乘积就是数字段所组成的十进制数就是最大k乘积
列出数组矩阵方便大家理解,以12345划分为3段为例。
对于m数组的初始化:
对c数组初始化:
void product::init_Arryc()
{
c[n][n];
cout<<"c:"<<endl;