【发布时间】:2021-10-12 02:46:42
【问题描述】:
问题陈述:
在玩 RPG 游戏时,您被分配完成该游戏中最困难的任务之一。在此任务中,您需要击败 n 怪物。每个怪物 i 用两个整数描述 - poweri 和 bonusi。要打败这个怪物,你至少需要 poweri 经验值。如果你在没有足够经验值的情况下尝试与这个怪物战斗,你会立即失败。
如果你打败了这个怪物,你还将获得bonusi 经验值。您可以按任何顺序击败怪物。结果证明任务非常艰巨-您试图击败怪物,但不断失败。你的朋友告诉你这个任务是不可能完成的。知道了,你就感兴趣了,你能打败的怪物的最大数量是多少?
输入:
第一行包含一个整数n,表示怪物的数量。
下一行包含一个整数 e,表示您的初始体验。
n 后续行(其中 0 ≤ i
n 后续行(其中 0 ≤ i
示例案例:
输入 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解决方案。
【问题讨论】:
-
n有什么限制? -
问题陈述中没有给出
-
你试过只分类怪物吗?
-
不,我想制作一个奖金和怪物对的列表,然后对该列表进行排序。但是我没试过
-
感觉像搜索问题,像回溯。需要搜索所有可能的组合以确保您拥有最深的树。