java - 您可以击败的最大怪物数量是多少?
问题描述
问题陈述:
在玩 RPG 游戏时,您被分配完成该游戏中最困难的任务之一。n
在此任务中,您需要击败一些怪物。每个怪物i
都用两个整数描述 -poweri
和bonusi
。要打败这个怪物,你至少需要 poweri 经验值。如果你在没有足够经验值的情况下尝试与这个怪物战斗,你会立即失败。
bonusi
如果你打败了这个怪物,你也会获得经验值。您可以按任何顺序击败怪物。结果证明任务非常艰巨-您试图击败怪物,但不断失败。你的朋友告诉你这个任务是不可能完成的。知道了,你有兴趣,你可以打败的怪物的最大可能数量是多少?
输入:
第一行包含一个整数 n,表示怪物的数量。
下一行包含一个整数 e,表示您的初始体验。
n 后续行(其中 0 ≤ i < n)中的每一行 i 都包含一个整数 poweri,它表示相应怪物的力量。
n 后续行(其中 0 ≤ i < n)中的每一行 i 包含一个整数 Bonusi,它表示击败相应怪物的奖励。
示例案例:
输入 2 123 78 130 10 0
输出2
输出说明
初始经验等级为123点。击败第一个力量78,加成10的怪物。经验等级现在是123+10=133。击败第二个怪物。
我试过的:
public static int defeat(int [] monster,int bonus[],int n,int exp){
if(n==0)
return 0;
if(n==1 && monster[0]<=exp)return 1;
if(n==1 && monster[0]>exp) return 0;
if(monster[n-1]<=exp){
return defeat(monster,bonus,n-1,bonus[n-1]+exp )+ defeat(monster,bonus,n-1,exp);
}else{
return defeat(monster,bonus,n-1,exp);
}
}
public static void main(String[] args) {
Scanner s = new Scanner(System.in);
int n = s.nextInt();
int exp = s.nextInt();
int monst[] = new int[n];
int bonus[] = new int[n];
for (int i = 0; i < n; i++) {
monst[i] = s.nextInt();
}
for (int i = 0; i < n; i++) {
bonus[i] = s.nextInt();
}
System.out.println(defeat(monst,bonus,n,exp));
}
我没有得到这个解决方案的正确答案。我认为这个问题是 0/1 背包问题(如果我错了,请纠正我)。你也可以为我提供这个问题的DP解决方案。
解决方案
您可以将怪物从所需的最低功率到最高功率进行排序,然后按此顺序击败它们。
public static void main(String[] args) {
Scanner s = new Scanner(System.in);
int n = s.nextInt();
int exp = s.nextInt();
int monst[] = new int[n];
int bonus[] = new int[n];
for (int i = 0; i < n; i++) {
monst[i] = s.nextInt();
}
for (int i = 0; i < n; i++) {
bonus[i] = s.nextInt();
}
class Monster {
private final int power, bonus;
public Monster(int power, int bonus){
this.power = power;
this.bonus = bonus;
}
}
Monster[] monsters = new Monster[n];
for(int i = 0; i < n; i++) monsters[i] = new Monster(monst[i], bonus[i]);
Arrays.sort(monsters, Comparator.comparingInt(m -> m.power));
int count = 0;
for(Monster m: monsters){
if(exp < m.power) break;
exp += m.bonus;
++count;
}
System.out.println(count);
}
推荐阅读
- python - 如何使用熊猫中的行和列的索引获取数据透视表条目
- ios - 我可以像这样自定义 UIPickerView 吗?
- python - 在 Qt 中结合数据和图形表示的最佳方式
- html - 是否有一个平台可以在没有 Mac 的情况下在高中课堂环境中为 iOS 开发 HTML5 应用程序?
- python - 将非类回调指向类方法
- ios - AVPlayerViewController 内存泄漏/保留周期?
- php - 使用 PHP 的嵌套数组 JSON
- docker - docker-compose healthcheck 无法以预期的方式工作,即先运行容器 a,然后运行容器 B
- java - 如何将一个 json 转换为 TestResult
- swift - Json数组字典在swift 5中解析nil