题目描述
输入
输出
样例输入
样例输出
源代码
#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\n",sum);
}
return 0;
}
关于这题
要求最优解 就要知道 在一个房间中 满足其中一只猫可以获得的奶酪数 这是解题关键
m 磅 猫食
n 个 房间
a[i]每个房间奶酪数 b[i] 其猫食需求量
p[i] 在一个房间中 满足其中一只猫可以获得的奶酪数
k 标记为第几个房间
max 比较哪一个房间 满足一只猫可以获得的奶酪数最多
注:在计算除法时 要转double 类型