有一只老鼠很喜欢奶酪,但是奶酪被分别放在N个房间里,而且这些房间都有一只猫咪看守,现在它准备和猫咪们做个交易。它有M磅的猫食,想用这M磅猫食换取奶酪。在猫咪看守的每一个房间里有奶酪J[i]磅,同时猫咪需要F[i]磅的食物,如果老师给猫咪F[i]*a%的猫食,那么它就可以得到J[i]*a%的奶酪。现在已知每只猫咪对猫食的需求量和每个房间的奶酪数,那老鼠怎样才能换得最多的奶酪呢?
输入
第一行输入参数M和N,后面跟N行(每个房间的奶酪数和猫食的需求量)。在输入M和N为-1和-1时程序终止。
输出
分行输出老鼠得到的最多的奶酪数,保留三位小数。
样例输入
5 3 7 2 4 3 5 2 20 3 25 18 24 15 15 10 -1 -1
样例输出
13.333 31.500
#include <stdlib.h> #include <stdio.h> int main() { int m; int n; int k; int i; int a[1001],b[1001]; double sum=0; double p[1001]; // double max = 0; while(scanf("%d %d",&m,&n)&&m!=-1&&n!=-1) { sum=0; // for(i=0;i<n;i++) { scanf("%d %d",&a[i],&b[i]); p[i]=(double)a[i]/b[i]; } while(m!=0&&n!=0) { max=0; for(i=0;i<n;i++) { if(p[i]>max) { max=p[i]; k=i; } } if(m-b[k]>=0) { m=m-b[k]; sum+=a[k]; p[k]=0; } else { sum+=(double)p[k]*m; m=0; } } printf("%.3lf ",sum); } return 0; }