FatMouse' TradeTime Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)Total Submission(s): 96684 Accepted Submission(s): 33692 Problem Description FatMouse prepared M pounds of cat food, ready to trade with the cats guarding the warehouse containing his favorite food, JavaBean.
Input 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 J[i] and F[i] respectively. The last test case is followed by two -1's. All integers are not greater than 1000.
Output For 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
|
算法思想:我把每个f[i]/j[i]的比值求出来就可以然后排个序。
# if 1
# include <iostream>
# include <algorithm>
# include <iomanip>
# include <cstdio>
using namespace std;
const int maxn = 1005;
struct node
{
int x, y;
double c;
};
bool cmp(node a, node b)
{
return a.c > b.c;
}
int main(int argc, char *argv[])
{
int m, n;
while(cin >> m >> n,(m != -1 && n != -1))
{
node s[maxn];
for(int i = 0; i < n; i++)
{
cin >> s[i].x >> s[i].y;
s[i].c = s[i].x / (double)s[i].y;
}
sort(s, s + n, cmp);
double sum = 0;
for(int i = 0; i < n; i++)
{
if(m >= s[i].y)
{
sum += s[i].x;
m -= s[i].y;
}
else
{
sum += m * s[i].c;
break;
}
}
// cout << setiosflags(ios::fixed) << setprecision(3) <<sum << endl;
printf("%.3lf\n", sum);
}
return 0;
}
# endif