题目 链接 http://acm.hdu.edu.cn/showproblem.php?pid=1009
题意:一共有n个房子,每个房子里有老鼠喜欢吃的javabeans,但是每个房间里的javabeans的价格不一样。老鼠用m元,问m元最多可以卖多少javabeans,其中每个房间里的javabeans可以被分割。
思路 : 先求单价,然后排个序就行了。(用float 貌似精度不够。。。。)
#include<cstdio>
#include<cstring>
#include<cstdlib>
#include<algorithm>
#define maxn 1005
using namespace std;
double n;
int m;
struct node
{
double f,j,k;
};
node no[maxn];
bool cmp(node a,node b)
{
return a.k>b.k;
}
int main()
{
while(scanf("%lf%d",&n,&m))
{
double sum=0;
if(n==-1&&m==-1) break;
for(int x=0;x<m;x++)
scanf("%lf%lf",&no[x].j,&no[x].f),no[x].k=no[x].j/no[x].f;
sort(no,no+m,cmp);
for(int x=0;x<m;x++)
{
if(n<0) break;
if(n>=no[x].f) sum+=no[x].j,n-=no[x].f;
else if(n>0&&n<no[x].f)
sum+=(no[x].k*n),n-=no[x].f;
}
printf("%.3lf\n",sum);
}
}