Files
python/GESP/Level6/20230901_bag.cpp
HuangHai 1f397eca87 'commit'
2025-08-30 18:35:01 +08:00

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;
}