题目一开始介绍了挺过故事背景的,但是身为一个无情的刷题机器人还是都跳过去了没怎么看。好像大概是意思是公主要救国王,于是要进行一场诺曼底登陆。现在我们要用船运三种装备,问这么运使得装备防御力最大化。
题目
有三种装备(头盔,护甲,鞋子),他们有重量,大小,防御力。分别记为S,W,D
然后三种装备个C1,C2,C3个可以组成套装,套装防御力会比原来的大(原来的防御力不在计算)
然后船有载重和空间。
求最多可以运达多少防御力。
输入格式为
n //船的数量,若输入0表示结束
w1,s1,d1 //头盔的重量,占地大小,防御力
w2,s2,d2 //护甲的重量,占地大小,防御力
w3,s3,d3 //鞋子的重量,占地大小,防御力
c1,c2,c3,d4 //组成套装需要c1个头盔,c2个护甲,c3个鞋子。套装防御力d4
D1,S1 //第一艘船的载重,空间
D2,S2 //第一艘船的载重,空间
.......... //其他船的载重,空间
解题
这道题的重点是如何拿装备的问题,对于任何以知两个装备的数量,则第三个装备的数量是唯一固定的。所以我们可以用一个二维数组来存储装备的选择,记为dp[i][j]=x。其中i为头盔的数量,j为护甲的数量,x则是鞋子的数量。对于船,因为他只有两个属性,我们可以构建一个car[2][n]的数组来存储,其中car[0]表示船的载重, car[1]表示空间。car[?][x]表示第几艘。
对于任意一辆车j,他可以拿的头盔是最大数量是
min(car[0][j]/w1,car[1][j]/s1)。因此对于所有车,我们可以知道装备i可以携带的最大值,如下公式。