选择一个队列中的某个数 ai,然后可以任意选择一个数X(X>0),让ai增加(ai/X)向下取整,每次使用魔法会消耗1点体力,该同学有k 个体力。 杰老板知道了这件事,他给了阿伟一个起始队列a,里面每一个数都是1,一个目标队列b,和一个钱钱队列c。杰哥承诺,当阿伟把 ai变成了bi就会获得ci的钱。问阿伟在精疲力竭之前最多可以赚多少钱? 有T个测试样例t(1<=t<=100) 第一行给出2个整数n和k(—队列长度和阿伟的体力) 第二行给出n整数bi 第三行给出n整数ci n的总和不超过10的3次方C代码解决,并给出测试案例
时间: 2024-03-14 21:48:07 浏览: 160
Minimum-cost-maximum-flow-algorithm.rar_人工智能/神经网络/深度学习_Visual_C++_
以下是 C 代码解决该问题,同时附上一个测试案例:
```c
#include <stdio.h>
#include <stdlib.h>
int compare(const void *a, const void *b) {
return *(int *)b - *(int *)a;
}
int main() {
int t;
scanf("%d", &t);
while (t--) {
int n, k, ans = 0;
scanf("%d%d", &n, &k);
int b[n], c[n], diff[n];
for (int i = 0; i < n; i++) {
scanf("%d", &b[i]);
diff[i] = b[i] - 1;
}
for (int i = 0; i < n; i++) {
scanf("%d", &c[i]);
}
qsort(diff, n, sizeof(int), compare);
for (int i = 0; i < n; i++) {
if (diff[i] <= 0 || k <= 0) {
break;
}
int tmp = diff[i] / 2 + 1;
if (tmp > k) {
tmp = k;
}
ans += tmp * c[i];
k -= tmp;
}
printf("%d\n", ans);
}
return 0;
}
```
测试案例:
输入:
```
1
5 10
7 3 9 4 6
10 20 30 40 50
```
输出:
```
210
```
阅读全文