发一个dp用来自己看
#include <iostream>
#include <math.h>
#include <string.h>
#include <algorithm>
#include <queue>
#define ll long long
using namespace std;
const int maxn=1100;
int h[maxn],s[maxn],w[maxn];
int dp[400][400];
int main()
{
int i,j,k,n,m,t;
int H,S;
cin>>n>>H>>S;
for (i=1; i<=n; i++)
{
cin>>h[i]>>s[i]>>w[i];
}
for (i=1; i<=n; i++)
{
for (j=H; j>h[i]; j--)
{
for (k=S; k>=0; k--)
{
//血量为j,耐力为k状态时的最大受益
if (k-s[i]<0)//没体力有血
{
if (j-h[i]+k-s[i]<=0)//没血
continue;
dp[j][k]=max(dp[j][k],dp[j-h[i]+k-s[i]][0]+w[i]);
}
else
dp[j][k]=max(dp[j][k],dp[j-h[i]][k-s[i]]+w[i]);
}
}
}
cout<<dp[H][S]<<endl;
return 0;
}