乘积最大【信息技术】.docVIP

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
乘积最大 今年是国际数学联盟确定的“2000—世界数学年”,又恰逢我国著名数学家华罗庚先生诞辰90周年。在华罗庚先生的家乡江苏金坛,组织了一场别开生面的数学智力竞赛活动,你的好朋友XZ也有幸得以参加。活动中,主持人给所有参加活动的选手出了这样一道题目: 设有一个长度为N的数字串,要求选手使用K个乘号将它分成K+1个部分,找出一种分法,使得这K+1个部分的乘积最大。 同时,为了帮助选手能够理解题意,主持人还举了如下一个例子: 有一个数字串:312,当N=3,K=1时会有两种分法: ⑴3*12=36 ⑵31*2=62 这时,符合题目要求的结果是:31*2=62。现在,请你帮助你的好朋友XZ设计一个程序,求得正确的答案。 输入 程序的输入共有两行: 第一行共有2个自然数N,K(2≤N≤40,1≤K≤6) 第二行是一个长度为N的数字串。 输出 结果显示在屏幕上,相对于输入,应输出所求得的最大乘积(一个自然数)。 样例输入 4 2 1231 样例输出 62 题解 由于自然数位数的上限为40,乘号数的上限为6,因此最大乘积位数的上限接近42位。显然,运算任何整数类型都无法容纳如此之大的数据,只能采用高精度运算,限于篇幅,对于高精度的加法运算、乘法运算和比较大小的运算,这里不作介绍,只是对’x’的最佳插入方式进行探讨: 假设s1‥si(2≤i≤n)中插入j个’*’。其中s1‥sk中插入了j-1个’*’,即乘式中的第j+1项为sk+1‥si(j≤k≤i-1): 设 ans[i,j]i的数串中插入j个’*’的最大乘积(整型数组)。显然 ans[i,0]=sis1对应的整型数组; ans[i,j]={ans[k,j-1]*sk+1si} (1≤i≤n, 1j≤min{i-1,m ans[n,m]即为其解。 由于乘式中第j+1项sk+1‥si为常量,因此要使得ans[i,j]最大,则s1‥sk中插入j-1个’*’的乘积必须最大;同样,为了寻找第j个’*’的最佳插入位置,必须一一查阅子问题ans[j,j-1]ans[i-1,j-1]i:数串的长度(2≤i≤n) 状态j:长度为i的数串中插入的’*’个数(1≤j≤min{i-1,m} 决策k:第j个’*’的最佳插入位置(j≤k≤i-1) 由此得出算法: 输入n,m和数串s; for i←1 to n do ans[i,0]←s1..si对应的整数数组; for i←2 to n do          {阶段:枚举数串的长度} for j←1 to min{i-1,m}   {状态:枚举长度为i的数串中插入的’*’个数} for k←j to i-1 do       {决策:枚举第j个’*’的插入位置} begin n←sk+1..si对应的整数数组;        {计算第j+1项} ans[i,j]max{ans[i,j],*n};      {计算状态转移方程} end;{for}

文档评论(0)

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档