zoj2109

来源:互联网 发布:bat java工程师面试题 编辑:程序博客网 时间:2024/06/06 07:38

题目大意:

FatMouse准备了M磅猫粮,准备和守卫在仓库门口的猫交换JavaBean。仓库有N个房间,第i个房间有J[i]磅JavaBean,需要F[i]磅猫粮。FatMouse不必全部交换,他可以按比例交换。请计算他最大可以换多少JavaBean。
输入:
M,N
接下来的N行是J[i]和F[i]

解题思路:

简单的贪心题,选择性价比高的。最后不够的,不必取整。

代码如下:

#include<iostream>#include<iomanip>using namespace std;struct food{  int j;  int f;  double ac;};int main(){  int M,N,i,j,index;  while(cin>>M>>N,N!=-1||M!=-1)  {    index=0;    double sum=0.0;    food *p=new food[N];    for(i=0;i<N;i++)    {      cin>>p[i].j>>p[i].f;      p[i].ac=double(p[i].j)/double(p[i].f);    }    for(i=0;i<N-1;i++)    {      index=i;      food tmp;      for(j=i+1;j<N;j++)      {        if(p[j].ac<p[index].ac)           index=j;      }      tmp=p[i];      p[i]=p[index];      p[index]=tmp;    }    for(i=N-1;i>=0;i--)    {      if(M>=p[i].f)      {        M=M-p[i].f;        sum=sum+p[i].j;      }      else      {        if(M!=0)        {          sum=sum+p[i].ac*M;          M=0;        }      }    }    cout<<setiosflags(ios::fixed)<<setprecision(3)<<sum<<endl;    delete []p;  }  return 0;}
0 0
原创粉丝点击