假设题目没有T这个约束,则这道题目可以看做 01 背包模板问题,所以我们只需要在 01 背包的基础上添加一层循环用来表示 T 的约束就可以了,dp[t][h] 表示在耗费t分钟和h点精力的情况下所收获的最大快乐值。

#include <bits/stdc++.h>
using namespace std;
#define int long long

const int N = 550;
int dp[N][N];

signed main(){
    ios::sync_with_stdio(false);
    cin.tie(0) , cout.tie(0);
    int n;
    cin >> n;
    int T , H;
    cin >> T >> H;
    for(int i = 1 , t , h , a ; i <= n ; i ++){
        cin >> t >> h >> a;
        for(int j = T ; j >= t ; j --)
            for(int k = H ; k >= h ; k --)
                dp[j][k] = max(dp[j][k] , dp[j - t][k - h] + a);
    }
    cout << dp[T][H] << '\n';
    return 0;
}