官方题解
2024-04-16 15:56:10
发布于:浙江
89阅读
0回复
0点赞
【算法分析】
最优策略:每一次贪心地选当前单位重量价值最大的金属装入口袋。
【参考代码】
#include <iostream>
#include <algorithm>
using namespace std;
struct node {
int n; //重量
int v; //价值
double up; //单位重量价值
};
bool cmp(node x, node y) {
return x.up > y.up;
}
int main() {
int k;
cin >> k;
while (k--) {
int w, s;
double va = 0; //带走的总价值
node a[105];
cin >> w >> s;
for (int i = 1; i <= s; i++) {
cin >> a[i].n >> a[i].v;
a[i].up = a[i].v * 1.0 / a[i].n;
}
sort(a + 1, a + s + 1, cmp);
for (int i = 1; i <= s; i++) {
if (w - a[i].n < 0) {
va += a[i].up * w;
break;
}
w -= a[i].n;
va += a[i].v;
}
printf("%.2f\n", va);
}
return 0;
}
【时间复杂度】
【预计得分】
全部评论 1
时间复杂度哪里,写“\log_{2}s” ,log前面加个斜杠,不然看着难受
2024-04-16 来自 上海
0感谢提醒,已调整
2024-04-16 来自 浙江
0
有帮助,赞一个