标签:cti ber this ace str return node log data
InputThe 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 Jii and Fii respectively. The last test case is followed by two -1‘s. All integers are not greater than 1000.
OutputFor each test case, print in a single line a real number accurate up to 3 decimal places, which is the maximum amount of JavaBeans that FatMouse can obtain.
Sample Input
5 3 7 2 4 3 5 2 20 3 25 18 24 15 15 10 -1 -1
Sample Output
13.333 31.500
#include<iostream> #include<cstdio> #include<cstring> #include<sstream> #include<algorithm> #include<queue> #include<vector> #include<cmath> #include<map> #include<set> #include<fstream> #include<memory> #include<string> using namespace std; typedef long long LL; #define MAXN 1004 #define INF 1000000009 /* 已知每个选择的 收益和花费 而且每个选择不一定要完成全部,收益和花费成比例匹配 求最大收益 贪心算法 不断采用收益比例最大的 */ int m, n; struct node { double rate, profit, cost; }a[MAXN]; bool cmp(node a, node b) { return a.rate > b.rate; } int main() { while (scanf("%d%d", &m, &n)) { if (m == -1 && n == -1) break; for (int i = 0; i < n; i++) { cin >> a[i].profit >> a[i].cost; a[i].rate = a[i].profit / a[i].cost; } sort(a, a + n, cmp); double ans = 0.0, tmp = m; for (int i = 0; i < n; i++) { if (tmp >= a[i].cost) { ans += a[i].profit; tmp -= a[i].cost; } else { ans += tmp*a[i].rate; break; } } printf("%.3lf\n", ans); } }
标签:cti ber this ace str return node log data
原文地址:http://www.cnblogs.com/joeylee97/p/6717717.html