资料内容仅供您学习参考,如有不当之处,请联系改正或者删除。
三、 问题分析
此程序要求实现将长度为 N 的数字串, 用 K 个乘号分成 K+1 个
部分, 使得这 K+1 个部分的乘积能够为最大。
由题, 数字串的顺序固定不变, 乘号在不同的位置插入, 使得
数字乘积发生变化, 并取其最大值输出。设 num=3456, n=4, k=3,
这表示要将 4 位的十进制整数 3456 分为 3 段。划分方法为: 3×4
×56=672, 3×45×6=810, 34×5×6=1020, 而第 3 种划分才是最
佳划分。本问题属于求最优值的一类问题。
假设第 k 个乘号插入的位置为 p, 取出由后 n-q 个数字组成的
数字串, 可能包含任意个( 不多于 k 个) 乘号。若能求出任意子串
包含 k-1 个乘号的最大乘积, 则只需穷举第 k 个乘号的插入位置 q,
该乘号将数字串分成前后两段, 后半段包含 k-1 个乘号, 其最大值
根据假设已经算出, 将它与前半段的值相乘得到第 k 个乘号在位置
q 时的乘积。取所有的第 k 个乘号不同插入方案中的最大乘积即为
问题”后 n-q 个数字组成的数字串插入 k-1 个乘号”的解。
假设数字字符串为 a
a
…a
( 2<=n<=40) , 设 f[i,j]表示在后
i 位数中插入 j 个乘号所得的最大值, p(1 , n , k )为从 l 到 n
加入 k 个乘号的最大乘积值。
( 1) K=1 时, 一个乘号能够插在 a1a2…a
中的 n-1 个位置, 这
样就得到 n-1 个子串的乘积: a
*a
…a
, a
a
* a
…a
, …, a
a
…a
* a
评论0
最新资源