- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
例题:部分背包问题 给定一个最大载重量为M的背包和N种货物。已知第i种货物的重量为Wi,其总价值为Pi,设定M,Wi,Pi均为整数,编程确定一个装货方案, 使得装入背包中的货物总价值最大。 分析:在求解装货方案时,设背包中装入了第i种货物的重量为Xi(0=Xi=Wi),显然当Xi=0表示背包中没有装入该种货物,问题就转化成如 下形式:确定一组X1,X2,...,XN,使得它们在满足Xi=W(i=1,2,...,N)的条件下,Xi*(Pi/Wi)具有最大值。 这里,设Ti为第i种货物的单位重量的价值,问题的目标函数是总价值S=Xi*Ti,显然,在装入相同重量的货物时,单位重量价值越大,则背 包所装的货物总价值越大。因此容易证明,在装货过程中,为保证背包中所装货物的总价值最大,应尽可能选择单位重量价值越大的物品优 先装入。这样问题的解决就变得非常简单。 算法的简单描述: program bag; begin 读入数据; 计算货物的单位重量价值Ti,并将它们按从大到小排序; 依次选择单位重量较大的货物放入背包,直至不能放入; 输出最大价值总和S和装货方案; end. 例题:合并果子(noip 04-2) ????在一个果园里,多多已经将所有的果子打了下来,而且按果子的不同种类分成了不同的堆。多多决定把所有的果子合成一堆。 ????每一次合并,多多可以把两堆果子合并到一起,消耗的体力等于两堆果子的重量之和。可以看出,所有的果子经过n-1次合并之后,就只剩下一堆了。多多在合并果子时总共消耗的体力等于每次合并所耗体力之和。 ????因为还要花大力气把这些果子搬回家,所以多多在合并果子时要尽可能地节省体力。假定每个果子重量都为1,并且已知果子的种类数和每种果子的数目,你的任务是设计出合并的次序方案,使多多耗费的体力最少,并输出这个最小的体力耗费值。 ????例如有3种果子,数目依次为1,2,9。可以先将1、2堆合并,新堆数目为3,耗费体力为3。接着,将新堆与原先的第三堆合并,又得到新的堆,数目为12,耗费体力为12。所以多多总共耗费体力=3+12=15。可以证明15为最小的体力耗费值。 【输入文件】 ????输入文件fruit.in包括两行,第一行是一个整数n(1=n=10000),表示果子的种类数。第二行包含n个整数,用空格分隔,第i个整数ai(1=ai=20000)是第i种果子的数目。 【输出文件】 ????输出文件fruit.out包括一行,这一行只包含一个整数,也就是最小的体力耗费值。输入数据保证这个值小于231。 【样例输入】 3 1 2 9 【样例输出】 15 【数据规模】 对于30%的数据,保证有n=1000: 对于50%的数据,保证有n=5000; 对于全部的数据,保证有n=10000。 2.高精度数乘以高精度数 先来看看我们平时的竖式乘法是如何进行的,例如乘数a=7492,乘以乘数b=251。 A图是普通竖式乘法的计算过程,但如果还是按位相乘先不进位就得到B图,观察B图可以发现乘数b的第1位乘以a的第1位,结果累加在商的第1位;乘数b的第1位乘以a的第2位,结果累加在商的第2位;乘数b的第2位乘以a的第1位,结果累加在商的第2位;依此类推,乘数b的第i位乘以a的第j位,结果累加在商的第i+j-1位,由此我们可以得出两个高精度数相乘的算法。 procedure multi2(var a:arr;b:arr); var c:arr; i,j,k,l:integer; begin fillchar(c,sizeof(c),0); for i:=1 to a[0] do for j:=1 to b[0] do inc(c[i+j-1],a[i]*b[j]); for i:=1 to maxn-1 do begin inc(c[i+1],c[i] div 10); c[i]:=c[i] mod 10; end; k:=maxn; while (c[k]=0)and(k1) do dec(k); c[0]:=k; a:=c; end; 高精度除法 高精度除法同样可以分为高精度数除以单精度数和高精度数除以高精度数两种情况。 1.高精度数除以单精度数 高精度数除以单精度数的运算方法可以模拟竖式除的过程,例如2593÷62的过程。 普通的竖式除的过程如下所示: 上面这个简单的例子可以看出这样的规律,高精度数a除以单精度数x,以高精度数a的第1个数(最高位)上的数字为被除数除以除数,余数扩大10倍加上a的第2个数(次高位)形成新的被除数,重复这个过程直到被除数结束。 a表示高精度被
您可能关注的文档
最近下载
- 水文分析软件:MIKE 21二次开发_(1).MIKE21概述.docx VIP
- 高中数学人教A版(2019)选择性必修第一册第三章圆锥曲线的方程教学分析和教学建议(课件).pptx
- 清洁生产和清洁生产审核.pptx VIP
- 人教版小学六年级语文上册第五单元测试卷及答案.pdf VIP
- 水族世界行业调研报告解数咨询1016mb.pptx VIP
- 冷库灭火和应急疏散救援预案.docx VIP
- 水文分析软件:MIKE 21二次开发_(10).MIKE21API接口应用.docx VIP
- 供应链风险管理与应急预案.docx VIP
- 酒店前台交接班记录表完整优秀版.docx VIP
- 一种小干扰RNA及其应用专利CN118516357A说明书.pdf
文档评论(0)