nyoj 824 Greedy Mouse
2016-07-21 09:50
387 查看
题目信息:
时间限制:1000 ms | 内存限制:65535 KB
难度:3
描述
A fat mouse prepared M pounds of cat food,ready to trade with the cats guarding the warehouse containing his
favorite food:peanut. The warehouse has N rooms.The ith room containsW[i] pounds of peanut and requires
F[i] pounds of cat food. Fatmouse does not have to trade for all the peanut in the room,instead,he may get
W[i]*a% pounds of peanut if he pays F[i]*a% pounds of cat food.The mouse is a stupid mouse,so can you tell
him the maximum amount of peanut he can obtain.
输入The input consists of multiple test cases. Each test case begins with a line containing two non-negative integers M and N. Then N lines follow, each contains two non-negative integers W[i] and F[i] respectively. The test
case is terminated by two -1. All integers are not greater than 1000.
输出For each test case, print in a single line a real number accurate up to 3 decimal places, which is the maximum amount of penaut that FatMouse can obtain.
样例输入
样例输出
此题为经典的贪心算法题:
AC代码:
Greedy Mouse
时间限制:1000 ms | 内存限制:65535 KB难度:3
描述
A fat mouse prepared M pounds of cat food,ready to trade with the cats guarding the warehouse containing his
favorite food:peanut. The warehouse has N rooms.The ith room containsW[i] pounds of peanut and requires
F[i] pounds of cat food. Fatmouse does not have to trade for all the peanut in the room,instead,he may get
W[i]*a% pounds of peanut if he pays F[i]*a% pounds of cat food.The mouse is a stupid mouse,so can you tell
him the maximum amount of peanut he can obtain.
输入The input consists of multiple test cases. Each test case begins with a line containing two non-negative integers M and N. Then N lines follow, each contains two non-negative integers W[i] and F[i] respectively. The test
case is terminated by two -1. All integers are not greater than 1000.
输出For each test case, print in a single line a real number accurate up to 3 decimal places, which is the maximum amount of penaut that FatMouse can obtain.
样例输入
5 3 7 2 4 3 5 2 20 3 25 18 24 15 15 10 -1 -1
样例输出
13.333 31.500
此题为经典的贪心算法题:
AC代码:
# include <stdio.h> # include <algorithm> using namespace std; struct TRADE { int pea; int cat; double ex; }; TRADE tad[1010]; int cmp(TRADE a, TRADE b) { return a.ex > b.ex; } int main(void) { int m, n; // m是房间数, n是猫粮磅数 while (scanf("%d %d", &n, &m), m != -1 || n != -1) { int i; for (i = 0; i < m; i++) { scanf("%d %d", &tad[i].pea, &tad[i].cat); tad[i].ex = 1.0 * tad[i].pea / tad[i].cat; } sort(tad, tad+m, cmp);//因为此处, WA了4次, 原因:错把n当成m double sum = 0.0; for (i = 0; i < m; i++) { if (n >= tad[i].cat) { sum += tad[i].pea; n -= tad[i].cat; } else { sum += n * tad[i].ex; break; } } printf("%.3lf\n", sum); } return 0; }