题面如下:机票
抽象出来就是个01背包裸题,选择当前需要的花费就是药水,然后对应增加价值,我提前预处理失败的可获得经验直接加,然后对应的赢获得的价值就是b-a。
#include<bits/stdc++.h> using namespace std; const int maxn=1e4; long long v[maxn],w[maxn],dp[maxn]; int main() { long long ans=0; int n,x,i,j,t; cin>>n>>x; for(i=0;i<n;i++) { int a,b,c; cin>>a>>b>>c; ans+=a; v[i]=b-a;w[i]=c; } for(i=0;i<n;i++) { for(j=x;j>=w[i];j--) dp[j]=max(dp[j],dp[j-w[i]]+v[i]); } dp[x]+=ans; cout<<dp[x]*5<<endl; return 0; }