原题链接
题解
这道题是贪心
只要按照性价比最高的取一定得到的价值最大
性价比就是这堆金币的价值除以重量
只需要把这些金币按性价比排序就行了
最后在超出和未超出之间,按比例放入金币即可
#include "iostream"
#include "algorithm"
#include "iomanip"
#include "vector"
using namespace std;
struct node{
double w;
double p;
}coin[100];
int main(){
int n,total,sum=0;
double ans=0;
cin>>n>>total;
for(int i = 0; i < n; i++){
cin>>coin[i].w>>coin[i].p;
}
sort(coin,coin+n,[](node o,node l)->bool{
return o.p/o.w>l.p/l.w;
});
for(int i=0;i<n;i++){
if(sum+coin[i].w<=total){
sum+=(int)coin[i].w;
ans+=coin[i].p;
}
else {
ans+=(total-sum)*(coin[i].p/coin[i].w);
break;
}
}
cout<<fixed<<setprecision(2)<<ans;
}
标签:node,背包,洛谷,int,double,P2240,coin,性价比,include
From: https://www.cnblogs.com/ChengMao/p/17111161.html