在经典游戏《魔塔》中,玩家需要控制主角与一个又一个怪物战斗。小明很喜欢
这个游戏,最近决定自己做一个魔塔玩玩,但是他在设置人物血量时犯了难,你能帮帮他吗?
在小明的设计中,主角和怪物都有攻击力、防御力、生命值三个属性,一共有N个怪物,且主角与怪物战斗的顺序是固定的。每场战斗都由主角先手,然后双方轮
流攻击,实际造成的伤害等于攻击力减去对方的防御力(伤害小于0时按0计算),直到一方的生命值归零后战斗才会结束。除此之外,小明还给主角加了一
个被动技能:
【被动技能一回复】在主角发动政击时,如果伤害值大于敌人剩余的生命值,那么溢出的伤害会为自己回复等量的生命。
在整个挑战过程中,任何时刻如果主角的生命值变为O,都会立即死亡,挑战失败。请问主角初始至少需要多少生命值才能保证通关呢?
输入描述:
输入第一行为一个正整数r,表示数据组数。
对于接下来每组数据,第一行为一个正整数N,表示怪物的数量。第二行为两个整数A和B,分别表示主角的攻击力和防御力。
接下来N行,每行三个整数A_i、B_i和H_i,表示第i个怪物的攻击力、防御力和生命值。
数据范围:
对于所有数据,满足1<=T<=5,1<=N<=100,0<=A,B,A_i,B_i<=100,1<=H i<=1000,
package com.sxf;
import java.util.ArrayList;
import java.util.List;
import java.util.Scanner;
class Solution {
public int sum(int[][] gws) {
int sums = 0;
for (int[] gw: gws) {
for (int val : gw) {
sums += val;
}
}
return sums;
}
public int demo(int u_gj, int u_fy, int[][] gws) {
List<Integer> temp = new ArrayList<>();
int[] gw;
while (sum(gws) != 0) {
for (int i = 0; i < gws.length; i++) {
gw = gws[i];
if (gw[0] + gw[1] + gw[2] == 0) {
continue;
}
// 怪物实际攻击值
int gw_gj = Math.max(gw[0] - u_fy, 0);
// 主角实际攻击值
int user_gj = Math.max(u_gj - gw[1], 0);
// 主角攻击力<=怪物防御力,打不过
if (user_gj == 0) {
return -1;
}
while (gw[2] > 0) {
// 主角攻击
// 怪物死亡
if (user_gj >= gw[2]) {
temp.add(-(user_gj - gw[2]));
gw[0] = 0;
gw[1] = 0;
gw[2] = 0;
break;
} else {
gw[2] = gw[2] - user_gj;
}
// 怪物攻击
temp.add(gw_gj);
}
}
}
int sum = 0;
int result = 0;
for (Integer val : temp) {
sum += val;
result = Math.max(result, sum);
}
return result+1;
}
}
public class Main {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
try {
while (sc.hasNext()) {
int group = sc.nextInt();
for (int i = 0; i < group; i++) {
int gwNums = sc.nextInt();
int user_gj = sc.nextInt();
int user_fy = sc.nextInt();
int[][] gws = new int[gwNums][3];
for (int j = 0; j < gwNums; j++) {
gws[j][0] = sc.nextInt();
gws[j][1] = sc.nextInt();
gws[j][2] = sc.nextInt();
}
int res = new Solution().demo(user_gj, user_fy, gws);
System.out.println(res);
}
}
}catch (Exception e){
}
}
}