```
#include <bits/stdc++.h>
using namespace std;
const int N = 55010;
int h, n;
int a[101], b[101], f[N];
int main() {
cin >> h >> n;
for (int i = 1; i <= h; i++)
cin >> a[i] >> b[i];
for (int i = 1; i <= h; i++)
for (int j = b[i]; j <= n+5000; j++)
f[j] = max(f[j], f[j - b[i]] + a[i]);
sort(b,b+h);
int t = b[0];
while (f[t] < n)
t++;
cout << t;
return 0;
}
```
懂了 这个状态的含义是在不少于j的时候最大的磅数,排列之后取最便宜的开始找最便宜的(符合)才不会报错hah
by SuAnRan @ 2022-12-03 00:49:27