题意:
mxy在一个游戏里求装备,他希望得到至少有a物抗和b魔抗的装备(可以大于),同时他也希望花费的费用最小,给出N个装备,以及每个装备附加的物抗a[i],魔抗b[i],以及价格m[i],求满足要求的最小费用。
1≤a≤21 1≤b≤79
1≤N≤21
1≤a[i]≤21 1≤b[i]≤79 1≤m[i]≤800
装备不可重复购买。
题解:
这题因为数据比较小,所以可以搜索,不过也可以用二维费用背包,当然,我是搜索。。。
搜索时注意剪枝:当前所需金额≥当前最优解,退
还有,
搜的时候,如果搜到了N+1,要退,不然会炸。
var
a,b,m:array [0..21] of longint;
min,i,n,x,y:longint;
procedure dfs(dep,rp,cp,ans:longint);
var
i:longint;
begin
if ans>=min then exit;
if (rp>=x) and (cp>=y) then
begin
min:=ans;
exit;
end;
if dep>n then exit;
for i:=dep to n do
dfs(i+1,rp+a[i],cp+b[i],ans+m[i]);
end;
begin
assign(input,'equipment.in'); reset(input);
assign(output,'equipment.out'); rewrite(output);
readln(x,y);
readln(n);
for i:=1 to n do
readln(a[i],b[i],m[i]);
min:=maxlongint;
dfs(1,0,0,0);
writeln(min);
close(input); close(output);
end.