不会的看我!!!
2024-01-13 10:38:13
发布于:广东
85阅读
0回复
0点赞
#include <bits/stdc++.h>
using namespace std;
const int N = 100001;
struct stu{
double w;//重量
double v;//价值
double wv;//单位重量价值
}a[N];
bool cmp(stu aa,stu bb)
{
return aa.wv>bb.wv;
}
int main()
{
int k;
cin>>k;
while(k--)
{
int n,m;
cin>>m>>n;//m代表口袋上限 n代表种类
for(int i=1;i<=n;++i)
{
cin>>a[i].w>>a[i].v;//先读入重量再价格
a[i].wv = a[i].v / a[i].w;
}
sort(a+1,a+1+n,cmp);
double sum = 0;
for(int i=1;i<=n;++i)
{
//面对物品,我们有两个选择,能不能拿
if(m>=a[i].w) //如果背包容量大于等于当前物品的重量
sum+=a[i].v;
else sum+=m*a[i].wv;//剩下空间*单位重量价值
m-=a[i].w;
if(m<=0) break;
}
printf("%.2f\n",sum);
}
return 0;
}
这里空空如也
有帮助,赞一个