| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1550 人关注过本帖, 1 人收藏
标题:求个算法
取消只看楼主 加入收藏
pangding
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
来 自:北京
等 级:贵宾
威 望:94
帖 子:6784
专家分:16751
注 册:2008-12-20
结帖率:96%
收藏(1)
已结贴  问题点数:100 回复次数:4 
求个算法
c++ 那边有人问了个题,我不会,在这边求个方法。

设有一个长度为N的数字串,要求使用K个乘号将它分成K+1个部分,找出一种分法,使得这K+1个部分的乘积能够为最大。
搜索更多相关主题的帖子: 能够 
2012-06-23 22:06
pangding
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
来 自:北京
等 级:贵宾
威 望:94
帖 子:6784
专家分:16751
注 册:2008-12-20
收藏
得分:0 
回复 2楼 czz5242199
f(i, j) 的 j 表示什么?另外每个 f(i, j) 都是个数组是吧?

原来几乎就是穷举。c++ 那边有个人瞎答了个类似分治的算法,搞的我想了半天也没想通。


[ 本帖最后由 pangding 于 2012-6-23 22:25 编辑 ]
2012-06-23 22:20
pangding
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
来 自:北京
等 级:贵宾
威 望:94
帖 子:6784
专家分:16751
注 册:2008-12-20
收藏
得分:0 
回复 4楼 czz5242199
是个不错的答案。我等一天,明天结帖。
2012-06-23 22:26
pangding
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
来 自:北京
等 级:贵宾
威 望:94
帖 子:6784
专家分:16751
注 册:2008-12-20
收藏
得分:0 
嗯,我说的不太专业。应该叫动态规划。
当然算过的地方不用再算了,我当时的穷举意思是每每多加一个乘号,就得把所有可能插乘号的地方试遍。能用的性质只有 a*b,当 b 不变的时候,a 越大积越大而已。
2012-06-23 23:28
pangding
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
来 自:北京
等 级:贵宾
威 望:94
帖 子:6784
专家分:16751
注 册:2008-12-20
收藏
得分:0 
我昨天也觉得这个题可能有类似贪心法的算法,但确实有些问题很难处理。

比如 198910 加两个乘号:
1 * 98 * 910 = 89180 < 19 * 8 * 910 = 138320

而且还有类似这样的例子:
999999 加一个乘号答案应该是: 999 * 999;而加两个,却是 99 * 99 * 99。
所以合并分点的位置,也需要从全局考虑。局部最优解可能不能推到整体最优。

[ 本帖最后由 pangding 于 2012-6-24 10:44 编辑 ]
2012-06-24 10:38
快速回复:求个算法
数据加载中...
 
   



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

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