題目:
思路:這是01揹包的變形。擁有的藥劑數表示包的價值,經驗值表示重量。但這個題目不管打贏與否,都能獲得經驗值。所以我們應該把一場比賽的價值當做打贏的經驗值減去輸了的經驗值,而把輸了的經驗值當做基本(原有基礎的)價值。
package Donggui;
import java.util.Scanner;
public class LG5倍工作日 {
public static void main(String[] args) {
Scanner sc=new Scanner(System.in);
int n=sc.nextInt();
int x=sc.nextInt();
int[] lost=new int[n];//不管扔不扔藥,都有這個經驗,所以把這個作爲基數加起來
int[] win=new int[n];
int[] w=new int[n];
int[] v=new int[n];//表示真正的價值(贏了得到的經驗減去輸了得到的經驗)
long [] dp=new long[2000];
int sum=0;
for (int i = 0; i < n; i++) {
lost[i]=sc.nextInt();
win[i]=sc.nextInt();
w[i]=sc.nextInt();
v[i]=win[i]-lost[i];
sum+=lost[i];
}
for (int i = 0; i < n; i++) {
for (int j = x; j >=w[i] ; j--) {
dp[j]=Math.max(dp[j],(dp[j-w[i]])+v[i]);
}
}
System.out.println((dp[x]+sum)*5);
}
}