39 lines
830 B
C++
39 lines
830 B
C++
#include <bits/stdc++.h>
|
|
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;
|
|
} |