- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
《金明的预算方案》的三种不同解法
湖北省襄樊市第五中学?杨兵
《金明的预算方案》是?NOIP2006?提高组的第二题。对于这道题,在此提供两种不同的
解法与大家共同探讨。
一、转化为?01?背包问题
考虑到每个主件最多只有两个附件,因此我们可以通过转化,把原问题转化为?01?背包
问题来解决,在用?01?背包之前我们需要对输入数据进行处理,把每一种物品归类,即:把
每一个主件和它的附件看作一类物品。处理好之后,我们就可以使用?01?背包算法了。在取
某件物品时,我们只需要从以下四种方案中取最大的那种方案:只取主件、取主件+附件
1、取主件+附件?2、既主件+附件?1+附件?2。很容易得到如下状态转移方程:
f[i,j]=max{f[i-1,j],
f[i-1,j-a[i,0]]+a[i,0]*b[i,0],
f[i-1,j-a[i,0]-a[i,1]]+a[i,0]*b[i,0]+a[i,1]*b[i,1],
f[i-1,j-a[i,0]-a[i,2]]+a[i,0]*b[i,0]+a[i,2]*b[i,2],
f[i-1,j-a[i,0]-a[i,1]-a[i,2]]+a[i,0]*b[i,0]+a[i,1]*b[i,1]+a[i,2]*b[i,2]}
其中,f[i,j]表示用?j?元钱,买前?i?类物品,所得的最大值,a[i,0]表示第?i?类物品主件的
价格,a[i,1]表示第?i?类物品第?1?个附件的价格,a[i,2]表示第?i?类物品第?2?个附件的价格,
b[i,0],b[i,1],b[i,2]分别表示主件、第?1?个附件和第?2?个附件的重要度。f[i-1,j]表示把?j?元钱全
部投入前?i-1?类物品所得的最大值,即不取第?i?类物品这一方案,f[i-1,j-a[i,0]]+a[i,0]*b[i,0]表
示只取第?i?类物品的主件这一方案,f[i-1,j-a[i,0]-a[i,1]]+a[i,0]*b[i,0]+a[i,1]*b[i,1],表示取第?i
类物品的主件和第1个附件这一方案,f[i-1,j-a[i,0]-a[i,2]]+a[i,0]*b[i,0]+a[i,2]*b[i,2],表示取
第?i?类物品的主件和第?2?个附件这一方案,f[i-1,j-a[i,0]-a[i,1]-a[i,2]]+a[i,0]*b[i,0]+a[i,1]*b[i,1]
+a[i,2]*b[i,2],则表示取第?i?类物品的主件和两个附件这一方案。
参考代码如下:
program?budget;
var
a,a:array[1..60,0..3]?of?integer;//a?数组用来存放每一类物品?[i,3]
a,
b:array[1..60,0..2]?of?integer;
f:array[0..60,0..3200]?of?integer;
n,m,i,s,v,p,q,j:integer;
begin
fillchar(a,sizeof(a),0);
fillchar(b,sizeof(b),0);
assign(input,budget.in);
assign(output,budget.out);
reset(input);
rewrite(output);
readln(n,m);
n:=n?div?10;
s:=0;
for?i:=1?to?m?do
begin
readln(v,p,q);//读入数据
v:=v?div?10;//优化,因为每个物品的价格是?10?的整数倍
if?q=0?then?begin//主件
inc(s);
a[s,0]:=v;
a[s,3]:=i;
b[s,0]:=p;
end
else?begin//是附件
for?j:=1?to?s?do//此循环用来查找该附件的主件,找到后就退出循环
if?a[j,3]=q?then?break;
if?a[j,1]=0?then?begin?a[j,1]:=v;b[j,1]:=p;?end
else?begin?a[j,2]:=v;b[j,2]:=p;?end;
end;
end;
fillchar(f,sizeof(f),0);
m:=s;//处理完输入数据后,s?为共有多少类物品
for?i:=1?to?m?do//对?m?类物品进行动态规划,枚举物品
for?j:=0?to?n?do//枚举状态
begin//找最优的方案
f[i,j]:=f[i-1,j];//不取第?i?类物品
if?(j=a[i,0])?and?(f[i,j]f[i-1,j-a[i,0]]+a[i,0]*b[i,0])
then?f[i,j]:=f[i-1,j-a[i,0]]+a[i,0]*b[i,0];
if?(j=(a[i,0]+a[i,1]))?and?(f
您可能关注的文档
最近下载
- 高素质农民培训行政第一课.pptx
- 第二单元写作“劳动光荣”:热爱劳动,从我做起++课件++2024—2025学年统编版高中语文必修上册.pptx VIP
- 2024-2025学年山东省济南市莱芜区五年级(上)期中模拟语文试卷.docx VIP
- 大气湍流信道中的激光束传输到达角起伏计算及实验 the calculation and experiment of angle-of-arrival fluctuation of laser beam transmission in the channel of atmospheric turbulence.pdf VIP
- 集合单元测试(职高).doc VIP
- 长钢轨存放作业指导书.doc VIP
- 【人教版化学】选择性必修1 知识点默写小纸条(空白默写版).pdf VIP
- 全国大学生职业规划大赛《金融学》专业生涯发展展示PPT【最新版】.pptx
- 日本个人信息保护法(新).docx VIP
- 【人教版化学】必修1 知识点默写小纸条(空白默写版).docx VIP
原创力文档


文档评论(0)