题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1009
题目大意:你有M块钱,有N个房间,每个房间有J[i] 个豆子,总价 F[i],求你最多可以买多少个豆子
简单的贪心
用float会WA
改double后AC
#include <iostream>
#include<vector>
#include<algorithm>
#include<cstdio>
#include <iomanip>
using namespace std;
class room{
public:
room(float a,float b):j(a),f(b){
prop=j/f;
}
bool operator< (const room &r)const{//operator要const
return prop>r.prop;
}
public:
float j,f,prop;
};
int main()
{
//freopen("in.txt","r",stdin);
int n;
float m;
float j,f;
vector<room>v;
v.reserve(1002);
float res;
while(cin>>m>>n){
if(m==-1&&n==-1)break;
res=0.0;
v.clear();
for(int i=0;i<n;++i){
cin>>j>>f;
room r(j,f);
v.push_back(r);
}
sort(v.begin(),v.end());
for(int i=0;i<n&&m>=0;++i){
if(m>=v[i].f){
m-=v[i].f;
res+=v[i].j;
}
else{
res+=v[i].j/v[i].f*m;
m=0;
}
//cout<<m<<endl;
}
printf("%.3lf\n",res);
}
return 0;
}