原题链接:http://acm.hdu.edu.cn/showproblem.php?pid=2187
题解:就是从便宜开始买,买完再买贵一点的,直至钱没了
代码如下:
#include<iostream>
#include<algorithm>
using namespace std;
const int maxn = 1000 + 5;
struct Node {
double price;
double total;
};
Node init[maxn];
bool cmp(Node x, Node y) {
return x.price < y.price;
}
int main() {
int num;
cin >> num;
while (num--) {
double n;
int m;
double sum = 0;
cin >> n >> m;
for (int i = 0;i < m;i++)
cin >> init[i].price >> init[i].total;
sort(init, init + m, cmp);
for (int i = 0;i < m&&n;i++) {
if (n/init[i].price >= init[i].total) {
sum += init[i].total;
n = n - init[i].price*init[i].total;
}
else {
sum = sum + n / init[i].price;
n = 0;
}
}
printf("%.2f\n", sum);
}
}