潜水员(动态规划)

来源:互联网 发布:caffe python 安装 编辑:程序博客网 时间:2024/05/02 00:50

Description

潜水员为了潜水要使用特殊的装备。他有一个带2种气体的气缸:一个为氧气,一个为氮气。让潜水员下潜的深度需要各种的数量的氧和氮。潜水员有一定数量的气缸。每个气缸都有重量和气体容量。潜水员为了完成他的工作需要特定数量的氧和氮。他完成工作所需气缸的总重的最低限度的是多少? 
例如:潜水员有5个气缸。每行三个数字为:氧,氮的(升)量和气缸的重量: 
3 36 120 
10 25 129 
5 50 250 
1 45 130 
4 20 119 
如果潜水员需要5升的氧和60升的氮则总重最小为249 (1,2或者4,5号气缸)。 
你的任务就是计算潜水员为了完成他的工作需要的气缸的重量的最低值。 

Input

从文本文件gas.in中读入数据。 
第一行有2整数t,a(1<=t<=21,1<=a<=79)。它们表示氧,氮各自需要的量。 
第二行为整数n (1<=n<=1000)表示气缸的个数。 
此后的n行,每行包括ti,ai,wi(1<=ti<=21,1<=ai<=79,1<=wi<=800)3整数。这些各自是:第i个气缸里的氧和氮的容量及汽缸重量。 

Output

仅一行包含一个整数,为潜水员完成工作所需的气缸的重量总和的最低值。 

Sample Input

 

5 60 
3 36 120 
10 25 129 
5 50 250 
1 45 130 
4 20 119

 

Sample Output

 

249


解题思路:f[i,j]表示付出费用v、最多选m件时可得到的最大价值,状态转移方程为:

f[j,k]=max{f[j,k],f[j-a[i],k-b[i]]+c[i]}

(1<=i<=k,v>=j>=0,u>=k>=0)

f[v,u]为所求。

时间复杂度:O(k*v*u)


程序:
var
  a,b,c:array [0..1000] of longint;
  f:array [0..100,0..100] of longint;
  t,s,v,u,k,m,i,j,l:longint;
begin
  fillchar(f,sizeof(f),$7f);
  f[0,0]:=0;
  readln(v,u);
  readln(k);
  for i:=1 to k do
   read(a[i],b[i],c[i]);
  for i:=1 to k do
    for j:=v downto 0do
      forl:=u downto 0 do
       begin
         t:=j+a[i];
         s:=l+b[i];
         if j+a[i]>v thent:=v;
         if l+b[i]>u thens:=u;
         if f[t,s]>f[j,l]+c[i] thenf[t,s]:=f[j,l]+c[i];
       end;
  writeln(f[v,u]);
end.



版权属于: Chris
原文地址: http://blog.sina.com.cn/s/blog_83ac6af80102varh.html
转载时必须以链接形式注明原始出处及本声明。
0 0
原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 儿童不爱吃蔬菜怎么办 婴儿不爱吃饭怎么办啊 初中不爱写作业怎么办 老是不想写作业怎么办 一年级孩子不爱学怎么办 一年级孩子不爱学习怎么办 我不想读书了怎么办 孩子读书读不懂怎么办 一岁多宝宝不吃奶粉怎么办 小孩不讲话怎么办 舌头 看书记不住内容怎么办 看不下去书怎么办 职高读不下去怎么办 小孩不主动说话怎么办 不喜欢自己的儿子怎么办 生了儿子不喜欢怎么办 孩子不愿意去幼儿园怎么办 内向妈妈带孩子怎么办 从小就不爱学习怎么办 孩子老爱玩不爱学习怎么办? 孩子不爱做题怎么办 看书静不下心怎么办 孩子不自觉学习怎么办 不自觉的孩子怎么办 不学习的孩子怎么办 电脑不受老师控制怎么办 儿子不尊重老师怎么办 小孩不喜欢吃蔬菜怎么办 小孩不愿练钢琴怎么办 孩子不喜欢幼儿园老师怎么办 孩子不主动思考怎么办 我初一不想读书怎么办 初中孩子不爱学习怎么办 初一就不想读书怎么办 孩子懒得写作业怎么办 初中学生讨厌学习怎么办? 小学不写作业怎么办 幼儿园小朋友不愿意上学怎么办 幼儿园孩子不愿意上学怎么办 宝宝不愿意上幼儿园怎么办 孩子不爱上幼儿园怎么办