【笔记】卡牌游戏(01背包问题)
538. 卡牌游戏 II
你跟你的朋友在玩一个卡牌游戏,总***有n张牌。每张牌的成本为cost[i]并且可以对对手造成damage[i]的伤害。你总***有totalMoney元并且需要造成至少totalDamage的伤害才能获胜。每张牌只能使用一次,判断你是否可以取得胜利。
样例
样例1
输入:
cost = [1,2,3,4,5]
damage = [1,2,3,4,5]
totalMoney = 10
totalDamage = 10
输出: true
样例说明: 我们可以使用 [1,4,5] 去造成10点伤害,总花费为10。
Example2
输入:
cost = [1,2]
damage = [3,4]
totalMoney = 10
totalDamage = 10
输出: false
样例说明:我们最多只能造成7点伤害。
-------------------------来源于:LintCode
此题是01背包问题的变形,有关01背包问题的介绍如下:
源码如下:
def cardGame(cost, dam, tm, td):
l, m= len(cost), [0] * (tm + 1)
for iin range(l):
for jin range(tm, cost[i] - 1, -1):
m[j] = max(m[j], m[j- cost[i]] + dam[i])
if m[j] >= td:
return True
return False