洛谷原题:https://www.luogu.com.cn/problem/P1802
初学DP,只拿了40分,但总感觉代码没问题
转移方程:f[i][j]=max(f[i-1][j]+lose[i],f[i-1][j-use[i]]+win[i])
#include<iostream>
#include<cstdio>
#include<algorithm>
using namespace std;
int n,x,lose[1002],win[1002],use[1002];
long long f[1002][1002];
//f[i][j]表示用j瓶药拿到前i人的exp
//f[i][j]=max(f[i-1][j]+lose[i],f[i-1][j-use[i]]+win[i])
long long dp(int n,int x){
for(int i=1;i<=n;i++){
for(int j=1;j<=x;j++){
if(j<use[i])f[i][j]=f[i-1][j]+lose[i];
else f[i][j]=max(f[i-1][j]+lose[i],f[i-1][j-use[i]]+win[i]);
}
}
return f[n][x];
}
int main(){
cin>>n>>x;
for(int i=1;i<=n;i++)cin>>lose[i]>>win[i]>>use[i];
long long exp=dp(n,x);
cout<<5*exp;
return 0;
}