http://acm.hdu.edu.cn/showproblem.php?pid=2187
这题看上去有点像背包,但是我自己做地时候没有用背包 ,我曾经做过一个类似的题,当时我并不知道背包 是什么,在poj上的金银岛也是这样做的
#include <iostream>
#include <algorithm>
using namespace std;
struct node
{
int p;
int h;
};
node arry[1100];
bool cmp(node a,node b)
{
if(a.p==b.p)
return a.h>b.h;
return a.p<b.p;
}
int main()
{
int cas;
while(cin>>cas)
{
while(cas--)
{
int n,m;
cin>>n>>m;
for(int i=0;i<m;i++)
cin>>arry[i].p>>arry[i].h;
sort(arry,arry+m,cmp);
double sum=0;
int money=0;
for(int i=0;i<m;i++)
{
money+=arry[i].p*arry[i].h;
sum+=arry[i].h;
if(money>n)
{
sum-=(money-n)*(double)1/arry[i].p;
break;
}
}
printf("%.2lf/n",sum);
}
}
return 0;
}