比较简单的贪心 主要应用结构体,寻求最大
FatMouse准备了M磅的猫食,准备与守卫仓库的猫交易,这些猫包含他最喜欢的食物,JavaBean。
仓库有N个房间。第i间房间包含J [I]磅的JavaBeans,并且需要F [i]磅的猫粮。FatMouse不必交易房间内的所有JavaBeans,相反,如果他付给F [i] * 1磅的猫粮,他可能会得到1磅的JavaBeans。这里是一个实数。现在他正在为你分配这个作业:告诉他他可以获得的最大JavaBeans数量。
输入输入由多个测试用例组成。每个测试用例都以包含两个非负整数M和N的行开始。然后N行包含两个非负整数J [i]和F [i]。最后的测试用例后面跟着两个-1。所有整数不大于1000。
产量对于每个测试用例,在一行中打印一个真实数字,精确到3位小数,这是FatMouse可以获得的最大JavaBean数量。
示例输入
5 3 7 2 4 3 5 2 20 3 25 18 24 15 15 10 -1 -1
示例输出
13.333 31.500 代码:主要比较猫食与豆的大小,j和f法、用成员运算符都放入p数组中即可,只要明白事例的运算过程,就ok
#include <iostream>
#include <stdio.h>
#include <algorithm>
using namespace std;
struct node
{
double j,f,x;
}p[1100];
bool cmp(node c,node b)
{
return c.x>b.x;
}
int main()
{
int i,n;
double m,sum;
while(~scanf("%lf%d",&m,&n))
{
for(i=0;i<n;i++)
{
scanf("%lf%lf",&p[i].j,&p[i].f);
p[i].x=p[i].j/p[i].f;
}
sum=0;
sort(p,p+n,cmp);
for(i=0;i<n;i++)
{
if(m>p[i].f)
{
sum+=p[i].x*p[i].f;
m-=p[i].f;
}
else
{
sum+=p[i].x*m;
break;
}
}
printf("%.3lf\n",sum);}
return 0;
}