Java 你正在玩策略卡牌杀戮尖塔游戏,轮到你出牌,手里N张攻击卡,每张都需要花金币coust[i]和获得伤害dmager[i]。
最多花3金币能造成的最大伤害是多少?
java
class Solution{
public int calc(int[] cost, int[] dmager, N){
int[][] db = new int[N + 1][4];
for(int i = 1; i <= N; i++){
for(int j = 0; j <= 3; j++){
if(cost[i-1] <= j){
dp[i][j] = Math.max(dp[i-1][j-cost[i-1]] + dmager[i-1], dp[i-1][j]);
}
else{
dp[i][j] = dp[i-1][j];
}
}
}
return db[N][3];
}
}
主要思路:
主要思路是使用动态规划,构建一个二维数组dp,dp[i][j]表示使用前i张卡牌,花费j金币能造成的最大伤害。对于每一张卡牌,我们可以选择使用或不使用,使用时需要判断当前金币是否足够,如果足够,就选择使用该卡牌,计算使用该卡牌后的伤害值;不足够时,就选择不使用该卡牌。最后返回dp[N][3],表示使用前N张卡牌,花费3金币能造成的最大伤害。