1 7 2 3 3 4 4
2.33
思路:先将单价排序,如果相同就排数量,将每种大米所需的总价格算出来,如果小于预算循环继续,大于预算就减去超出的部分,结束循环。
代码
#include<iostream>
#include<algorithm>
#include<cstdio>
using namespace std;
struct intn
{
int p,h;
}d[1100];
bool cmp(intn a,intn b)
{
if(a.p==b.p)return a.h>b.h;
return a.p<b.p;
}
int main()
{
int c,n,m,i,money;
double sum;
while(cin>>c)
{
while(c--)
{
cin>>n>>m;
for(i=0;i<m;i++)
cin>>d[i].p>>d[i].h;
sort(d,d+m,cmp);
sum=0;
money=0;
for(i=0;i<m;i++)
{
money+=d[i].p*d[i].h;
sum+=d[i].h;
if(money>n)
{
sum-=(money-n)*(double)1/d[i].p;
break;
}
}
printf("%.2lf\n",sum);
}
}
return 0;
}
原文地址:http://blog.csdn.net/blue_skyrim/article/details/46446533