题目链接:https://cn.vjudge.net/problem/OpenJ_Bailian-4110
思路:很简单的贪心,性价比排序,先选性价比高的 。证明略~
#include <iostream>
#include <algorithm>
#include <cstdlib>
using namespace std;
const double eps = 1e-6;
struct Candy {
int v,w;
bool operator < (const Candy &c) {
return (double)v/w > (double) c.v/c.w;
}
}Candies[101];
int main()
{
int num;
double Max,ans = 0;
cin >> num >> Max;
for(int i=1;i<=num;i++)
cin >> Candies[i].v >> Candies[i].w;
sort(Candies+1,Candies+num+1);
for(int i=1;i<=num;i++) {
if(Max >= Candies[i].w) {
ans += Candies[i].v;
Max -= Candies[i].w;
}
else {
ans += Candies[i].v/Candies[i].w * Max;
break;
}
}
printf("%.1lf",ans);
}