#include using namespace std; const int N = 2010; int v[N], w[N]; int n, L; int f[N][N * 5]; // 需要扩大第二维 int main() { cin >> n >> L; int sum_v = 0; for (int i = 1; i <= n; i++) { cin >> v[i] >> w[i]; sum_v += v[i]; // 累计总花费上限 } // 动态规划过程 for (int i = 1; i <= n; i++) { for (int j = 0; j <= sum_v; j++) { // 修正循环范围 f[i][j] = f[i - 1][j]; if (j >= v[i]) f[i][j] = max(f[i][j], f[i - 1][j - v[i]] + w[i]); } } // 寻找最小花费 int ans = -1; for (int j = 0; j <= sum_v; j++) { // 遍历所有可能花费 if (f[n][j] >= L) { ans = j; break; } } if (ans == -1) cout << "no solution" << endl; else cout << ans << endl; return 0; }