标题:求助:用C++编程,且要求程序里要有类
取消只看楼主
duoaizhu
Rank: 1
等 级:新手上路
帖 子:2
专家分:0
注 册:2012-6-22
结帖率:100%
已结贴  问题点数:20 回复次数:1 
求助:用C++编程,且要求程序里要有类
设有一个长度为N的数字串,要求使用K个乘号将它分成K+1个部分,找出一种分法,使得这K+1个部分的乘积能够为最大。
搜索更多相关主题的帖子: 要求 
2012-06-23 00:19
duoaizhu
Rank: 1
等 级:新手上路
帖 子:2
专家分:0
注 册:2012-6-22
得分:0 
要用动态规划做。
问题中只有乘号插入的位置是变化的,取数字串中的任意一段(i到j)来考虑,若能求出在其中插入K-1个乘号的最大乘积,则只需穷举第K个乘号的插入位置t(t从初始的i+K-1开始插入,最多插入到j-1后)。该乘号把数字串分成了两段,前半段包含K-1个乘号(其最大值已经算出),将它的值与后半段的值相乘得到第K个乘号在位置t时的最大乘积。选出t在各个位置时得到的最大乘积即为问题的解。  
    依此类推,把K-1的问题归结为K-2的情况,……,直到求在任意一段中插入1个乘号的最大乘积时,需预先算出在任意一段中插入0个乘号时的最大乘积。而此时的值是已知的(即为该段的数值)。假设DP[i,j,K]表示在长为N的数字串中,从第i个数字到第j个数字之间插入K个乘号的最大乘积,动态转移方程如下:
DP[i,j,k] = MAX {DP[i,t,0] * DP[t,j,k-1] | i<t<j}  
2012-06-24 01:16



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-372096-1-1.html




关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 1.918691 second(s), 8 queries.
Copyright©2004-2025, BCCN.NET, All Rights Reserved