题解:其实是01背包的变种
当j>=use[i]时,可以选择用药水打(赢)和不用药水打(输)
当i<use[i]时,百分百是输的
注意:不管药水够不够在这里都是可以增加价值的
#include<bits/stdc++.h>
using namespace std;
long long n,x,lose[10005],win[10005],use[10005],dp[10005];
int main(){
cin>>n>>x;
for(int i=0;i<n;i++){
cin>>lose[i]>>win[i]>>use[i];
}
for(int i=0;i<n;i++){
for(int j=x;j>=0;j--){
if(j>=use[i]){
dp[j]=max(dp[j]+lose[i],dp[j-use[i]]+win[i]);//用药打还是不用药打
}else{//不能用药一定输
dp[j]+=lose[i];
}
}
}
cout<<dp[x]*5<<endl;
return 0;
}