中易网

Pascal编程潜水员问题 具体如下

答案:1  悬赏:0  
解决时间 2021-01-07 12:24
Pascal编程潜水员问题 具体如下
最佳答案
这是明显的动态规划的背包问题,每个汽缸只能用一次。
tot[i,j]表示有i个单位的氧气和j个单位的氮的重量最小值。
明显可以推出tot[i+a[k],j+b[k]]+c[k]即可。
再特判一下i+a[k]的值和j+b[k]的值。
(注意:因为只能取一次,所以要downto,免得加重复了)
比如
for k:=1 to l do
for i:=1 to n do
for j:=1 to m do
这样更新时,在tot[i+a[k],j+b[k]]更新完了后,在后来循环到了i+a[k],j+b[k]时又会再加一次
变得i+a[k]+a[k],j+b[k]+b[k]也会有值,但是这不成立,所以downto,如果不懂可以用三维,加多一维。(如果楼主实在不懂,可以参考背包九讲)
var
n,m,l,i,k,j,be,en:longint;
tb,te,map:array[1..1000] of longint;
tot:array[0..21,0..79] of longint;
begin
readln(n,m);
readln(l);
for i:=1 to l do read(tb[i],te[i],map[i]);
fillchar(tot,sizeof(tot),$7f div 3);
tot[0,0]:=0;
for k:=1 to l do
for i:=n downto 0 do
for j:=m downto 0 do
begin
be:=i+tb[k];
en:=j+te[k];
if (be>n) then be:=n;
if (en>m) then en:=m;
if tot[be,en]>tot[i,j]+map[k] then tot[be,en]:=tot[i,j]+map[k];
end;
writeln(tot[n,m]);
end.
望采纳
我要举报
如以上问答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
凯越2013的L2B发动机怎么样
我是不是爽大了,女友让我去她家还要我买套
我是脸很大 、带个黑框眼镜(有附图)。请问
跪求 桜井骏的泰迪熊百度网盘 (´இ
什么是型砂和芯砂
菏泽招商银行在哪里
隆回县汇宝汽车修理厂怎么去啊,我要去那办事
侠客风云传前传龙王和阎罗选哪个好
车贷一年,必须要一个月一个月的还吗?一年一
那些路边摆地摊那些人货都是哪进的呀
2018年的成都高校宿舍共享情况如何???
某县地处偏僻山区,青山绿水,满目苍翠,生态
情感上的疑惑求帮助
佛教产生之前,有佛吗?有西方极乐世界吗?
好先生江莱在酒吧喝醉唱的什么歌
推荐资讯
请问什么是楼房集体供暖呢?是否每家每户都有
一面倒的意思是什么?一面倒的释义是什么啊?
有什么经典的德语语句
去平谷不走2环怎么去
临江镇上的申通快递站点在哪
荣耀v10手机电池真心不耐用,你们的是这个情
换了机油油耗变高怎么回事
深圳坪山附近有什么好玩的
这个事情我处理的对吗?
大理剑川有会所吗 你知道的
?商城到杭州火车
中国电信(解放路营业厅)(解放路124号附近中国
手机登qq时,显示手机磁盘不足,清理后重新登
刺客的套装怎么选啊?