本题的关键在于对米的单价进行排序;
同时,要注意手中的钱能不能买光这一类米;
还有就是手里还有没有钱,没钱时直接break退出;
#include <bits/stdc++.h>
using namespace std;
struct node
{
int p,h;
};
int main()
{
int t,n,m,i,j;
double s;
struct node a[1010];
scanf("%d",&t);
while(t--)
{
s=0;
scanf("%d %d",&n,&m);
for(i=1; i<=m; i++)
scanf("%d %d",&a[i].p,&a[i].h);
for(i=1; i<m; i++)
for(j=1; j<=m-i; j++)
if(a[j].p>a[j+1].p)
{
a[0]=a[j];
a[j]=a[j+1];
a[j+1]=a[0];
}
for(i=1; i<=m; i++)
{
if(n>=a[i].p*a[i].h)
{
n=n-a[i].p*a[i].h;
s=s+a[i].h;
}
else
{
s=s+(1.0*n)/a[i].p;
n=0;
break;
}
}
printf("%.2f\n",s);
}
return 0;
}