借鉴了第二篇题解的思路
#include<bits/stdc++.h>
#define int long long
using namespace std;
const int N = 1005;
int n, m, t, c[N], tr[N], dp[N][N];
signed main(){
scanf("%lld%lld%lld", &n, &m, &t);
if(m >= t){
puts("0");
return 0;
}
for(int i = 1; i <= n; i++){
scanf("%lld%lld", &c[i], &tr[i]);
}
memset(dp, -0x3f, sizeof dp);
dp[0][0] = m;
for(int i = 0; i <= t; i++){
for(int j = 0; j <= t; j++){
for(int k = 1; k <= n; k++){
if(j >= tr[k] && dp[i][j - tr[k]] >= c[k]) dp[i][j] = max(dp[i][j] , dp[i][j - tr[k]] - c[k]);
}
if(dp[i][j] >= t){ printf("%lld\n", i); return 0; }
dp[i + 1][j] = dp[i][j] + j;
}
}
return 0;
}