题目描述:
现在 absi2011 拿出了 𝑥x 个迷你装药物(嗑药打人可耻…),准备开始与那些人打了。
由于迷你装药物每个只能用一次,所以 absi2011 要谨慎的使用这些药。悲剧的是,用药量没达到最少打败该人所需的属性药药量,则打这个人必输。例如他用 22 个药去打别人,别人却表明 33 个药才能打过,那么相当于你输了并且这两个属性药浪费了。
现在有 𝑛n 个好友,给定失败时可获得的经验、胜利时可获得的经验,打败他至少需要的药量。
要求求出最大经验 𝑠s,输出 5𝑠5s。
代码:
package lanqiao;
import java.util.*;
public class Main {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int n = sc.nextInt(); //好友数
int x = sc.nextInt(); //装药瓶
int[][] arr = new int[n + 1][3];
for(int i = 1;i <= n;i ++)
{
for(int j = 0;j < 3;j ++)
{
//失败的经验,成功的经验,打败所需的药瓶数
arr[i][j] = sc.nextInt();
}
}
long[] dp = new long[x + 1];
for(int i = 1;i <= n;i ++)
{
for(int j = x;j >=0;j --)
{
if(j >= arr[i][2])
{
dp[j] = Math.max(dp[j] + arr[i][0],dp[j - arr[i][2]] + arr[i][1]);
}
else{
dp[j] = dp[j] + arr[i][0];
}
}
}
System.out.println(5 * dp[x]);
}
}