#include <cstdio> #include <iostream> #include <string> #include <sstream> #include <cstring> #include <stack> #include <queue> #include <algorithm> #include <cmath> #include <map> #define PI acos(-1.0) #define ms(a) memset(a,0,sizeof(a)) #define msp memset(mp,0,sizeof(mp)) #define msv memset(vis,0,sizeof(vis)) using namespace std; //#define LOCAL struct Node { int num;//绿豆数量 int need;//需要猫粮 }t; int cmp(Node n1,Node n2)//单价从小到大 { return 1.0*n1.need/n1.num<1.0*n2.need/n2.num; } int main() { #ifdef LOCAL freopen("in.txt", "r", stdin); #endif // LOCAL ios::sync_with_stdio(false); int n,m;//猫粮,组数 vector<Node> v; while(cin>>n>>m&&n!=-1) { v.clear(); double ans=0; for(int i=0;i<m;i++) cin>>t.num>>t.need,v.push_back(t); sort(v.begin(),v.end(),cmp); for(int i=0,siz=v.size();i<siz;i++) { t=v[i]; if(t.need<=n)ans+=t.num,n-=t.need; else {ans+=n/(1.0*t.need/t.num);break;} } printf("%.3lf\n",ans); } return 0; }
原文:http://www.cnblogs.com/gpsx/p/5186702.html