AC代码:
#include <bits/stdc++.h>
#define int long long
using namespace std;
const int N=5010;
int n,a,b,c;
int dp[N][N];
struct node{
int a,b,c;
bool operator<(const node &t) const{
return b-a>t.b-t.a;
}
}v[N];
main(){
cin>>n>>a>>b>>c;
for(int i=1;i<=n;i++)cin>>v[i].a>>v[i].b>>v[i].c;
sort(v+1,v+1+n);
//这里不合法状态一定要标记,否则后面转移会出问题
for(int i = 0; i <= n; i++)
for(int j = i+1; j <= c; j++)
dp[i][j] = -1e9;
for(int i=1;i<=n;i++){
for(int j=0;j<=min(c,i);j++){
if(j)dp[i][j]=max(dp[i][j],dp[i-1][j-1]+v[i].c);
if(i-j<=b) dp[i][j]=max(dp[i][j],dp[i-1][j]+v[i].b);
else dp[i][j]=max(dp[i][j],dp[i-1][j]+v[i].a);
}
}
cout<<dp[n][c]<<endl;
}