题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=2187
题解:
贪心算法,用一个结构体存单价、数量,对单价排序,从价格最小的开始购买,即可得到最大数量的大米重量
AC代码:
#include <iostream>
#include <algorithm>
using namespace std;
struct Info {
int p, h;
};
bool cmp(Info s1, Info s2) {
return s1.p < s2.p;
}
int main(){
int C, n, m;
cin >> C;
while (C--) {
cin >> n >> m;
Info s[1000]; //此处如果写成m,则在提交时会出现编译错误,因此直接开大点
for(int i = 0; i < m; i++) {
cin >> s[i].p >> s[i].h;
}
sort(s, s + m, cmp);
float ans = 0;
for(int i = 0; i < m; i++) {
if(s[i].p * s[i].h <= n) {
ans += s[i].h;
n -= s[i].p * s[i].h;
}
else {
ans += n / (s[i].p * 1.0);
break;
}
}
printf("%.2f\n", ans);
}
return 0;
}