买装备(dp,背包)

这里写图片描述

分析: 二维费用背包:f[i,j]表示物抗为i魔抗为j时最小的金额数。
对当前(ai,bi,mi)f[i+ai,j+bi]=min{f[i,j]+mi};
如果i+ai大于A,则将f[i+ai]更新到f[a]中去,j同理。

代码

const
  maxn=100;
var
  f:array[0..maxn,0..maxn] of longint;
  a,b,m:array[0..maxn] of longint;
  n,aa,bb,i,j,k,x,y:longint;

function min(x,y:longint):longint;
begin
  if x<y then exit(x) else exit(y);
end;

begin
  assign(input,'equipment.in');reset(input);
  assign(output,'equipment.out');rewrite(output);
  readln(aa,bb);
  readln(n);
  for i:=1 to n do
    readln(a[i],b[i],m[i]);
  for i:=0 to aa do
    for j:=0 to bb do
      f[i,j]:=maxlongint div 2;
  f[0,0]:=0;
  for i:=1 to n do
    for j:=aa downto 0 do
      for k:=bb downto 0 do
        begin
          x:=j+a[i];
          y:=k+b[i];
          if x>aa then x:=aa;
          if y>bb then y:=bb;
          f[x,y]:=min(f[x,y],f[j,k]+m[i]);
        end;
  writeln(f[aa,bb]);
  close(input);close(output);
end.
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值