A8008.金银岛题解(没有结构体)复杂
2026-02-21 17:04:44
发布于:江苏
8阅读
0回复
0点赞
【算法分析】
最优策略:每一次贪心地选当前单位重量价值最大的金属装入口袋。(贪心)
【参考代码】(有点复杂)(不如结构体)
直接上代码
#include <bits/stdc++.h>
using namespace std;
int main(){
int k;cin>>k;
while(k--){
int w;cin>>w;
int s;cin>>s;
int a[105];//金属重量
int b[105];//金属价值
double v[105];//单位重量价值(价值/重量)
int idx[105];//匹配重量/价值
for (int i = 1; i <= s; i++) {
cin >> a[i] >> b[i];
v[i]= b[i]*1.0/a[i];
idx[i]=i;
}
sort(idx+1,idx +s+1,[&](int x, int y) {
return v[x]>v[y];
});
int restw=w;
double va=0.0;
for (int i =1; i <= s; i++) {
if(restw<=0)break;
int qwe=idx[i];
if (a[qwe]<=restw){
va+=b[qwe];
restw-=a[qwe];
}else{
va+=v[qwe]*restw;
restw=0;
}
}
printf("%.2f\n",va);
}
return 0;
}
全部评论 1
大家可以看看用结构体的题解,我的有点复杂哈
2天前 来自 江苏
0







有帮助,赞一个