老鼠与猫的交易

有一只老鼠很喜欢奶酪,但是奶酪被分别放在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;
}
原文地址:https://www.cnblogs.com/Lazy-Cat/p/9838390.html