题意:
简单的贪心题,选择性价比高的。最后不够的,不必取整。
代码:
#include <iostream>
#include <vector>
#include <algorithm>
#include <iomanip>
using namespace std;
struct room
{
int javabean,catFood;
double rate;
};
bool cmp(room a,room b)
{
return a.rate>b.rate;
}
int main()
{
int amount,roomNum,javabean,catFood,cnt;
double rate,ans;
room tmp;
while(cin>>amount>>roomNum&&(amount!=-1&&roomNum!=-1))
{
ans=0;
cnt=0;
vector <room> store;
for(int i=0;i<roomNum;i++)
{
cin>>javabean>>catFood;
tmp.javabean=javabean;
tmp.catFood=catFood;
tmp.rate=1.0*javabean/catFood;
store.push_back(tmp);
}
sort(store.begin(),store.end(),cmp);
while(true)
{
if(cnt==store.size())break;
if(amount>=store[cnt].catFood)
{
ans+=store[cnt].javabean;
amount-=store[cnt].catFood;
cnt++;
}
else
{
ans+=1.0*amount*store[cnt].rate;
amount=0;
break;
}
}
cout<<fixed<<setprecision(3)<<ans<<endl;
}
return 0;
}