利用贪心,因为对于每种大米是散装的因此对于每种大米你可以选择任意重量的;题中给出的p,h分别表示每种大米的单价和这种大米总共有多少。注意:对于每种大米的总价=h*p,利用贪心的思想优先选择单价(每单位质量的价格)低的大米种类。
AC代码:
#include <iostream>
#include <algorithm>
#include <stdio.h>
using namespace std;
struct RICE
{
double h;
double p;
}rice[1002];
bool cmp(RICE a,RICE b)
{
return a.p<b.p;
}
int main()
{
int C;
double n;
int m;
cin>>C;
while(C--)
{
cin>>n>>m;
for(int i=0;i<m;i++)
cin>>rice[i].p>>rice[i].h;
sort(rice,rice+m,cmp);
int i=0;
double sum=0;
for(int i=0;i<m;i++)
{
if(rice[i].p*rice[i].h<=n)
{
sum+=rice[i].h;
n-=rice[i].p*rice[i].h;
}
else
{
sum+=n/rice[i].p;
break;
}
}
printf("%.2f\n",sum);
}
return 0;
}