C++ 实现最大k乘积

本文介绍了如何使用C++通过动态规划算法解决最大k乘积问题。内容包括算法概念、要求、思路和核心代码,涉及文件读取和结果写入。
摘要由CSDN通过智能技术生成

算法:C++ 实现最大k乘积

概念解释
最大k乘积:将长度为N的数字划分为k段所组成的十进制数的最大乘积
例如:将 123 划分为2段的最大乘积为:max = 12*3

算法思想:
动态规划

算法要求:

  1. 从input.txt中读取n和k值,以及数字段:
    5 3
    12345
    n = 5表示数字长度为5,k=3,表示将数字划分为3段
    待划分的数字段为12345

  2. 将求解的最大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;
    
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值