题意:有n个房子,每个房子里都有老鼠喜欢吃的咖啡豆J[i],但是每个房子都有猫看守,老鼠现在手上有M的猫粮。可以用猫粮换咖啡豆,每只猫都有猫粮的要求F[i]。老鼠得到的咖啡豆是J[i]*a%       a%=给的猫粮/F[i]         求最多可以得到多少咖啡豆

思路:没看懂英文,所以搜了一下,看见他们说贪心...  其实也就是比例问题,每份F[i]可以换到越多的J[i]越好  ,  依着这个思路排序 然后在循环求答案就好了...

代码如下:

#include <iostream>
#include <stdio.h>
#include <algorithm>
using namespace std;
double K[]; struct jfpoint
{
double J,F;
double K;
}; jfpoint JF[]; bool paixu(jfpoint a,jfpoint b)
{
return a.K>b.K;
} int main()
{
int M,N;
double ans=;
while(scanf("%d%d",&M,&N))
{
double ans=;
if(M<||N<)
break;
for(int i=; i<N; i++)
{
scanf("%lf%lf",&JF[i].J,&JF[i].F);
JF[i].K=JF[i].J/JF[i].F;
}
sort(JF,JF+N,paixu);
for(int i=; i<N; i++)
{ if(M>=JF[i].F)
{
ans+=JF[i].J;
M-=JF[i].F;
//printf("M=%d\t取全部的ans=%.3lf\n",M,ans);
continue;
}
if(M<JF[i].F)
{
ans+=M/JF[i].F*JF[i].J;
M=;
//printf("\nM=%d\t取全部的ans=%.3lf\n",M,ans);
break;
}
//printf("ans=%.3lf\n",ans);
}
printf("%.3lf\n",ans);
}
return ;
}
05-04 04:00