解题
2025-10-01 12:57:04
发布于:浙江
2阅读
0回复
0点赞
#include <iostream>
#include "bit"
#include "vector"
#include "unordered_set"
#include "unordered_map"
#include "set"
#include "queue"
#include "algorithm"
#include "bitset"
#include "cstring"
#include "cmath"
using namespace std;
const int N = 5e4 + 1;
// 强度 >= P 的最小花费
int t, f[101][N], p[101], c[101]; // fij: 从前 i 个里选择,费用为 j 的最大强度
int main() {
cin >> t;
while (t--) {
int n, P, Q;
cin >> n >> P >> Q;
for (int i = 1; i <= n; i++) {
cin >> p[i] >> c[i];
}
int x = 1e9;
for (int i = 1; i <= n; i++) {
for (int j = 1; j <= Q; j++) {
f[i][j] = f[i - 1][j];
if (j >= c[i])
f[i][j] = max(f[i][j], f[i - 1][j - c[i]] + p[i]);
if (f[i][j] >= P && j < x)
x = j;
}
}
if (x > Q) cout << "-1\n";
else cout << x << endl;
}
}
这里空空如也
有帮助,赞一个