题目描述:
现在 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]);}
}