/** \brief hdu 1009--greedy * * \param date 2014/7/18 * \param state AC * \return * */#include <iostream>#include <fstream>#include <algorithm>#include <cstring>using namespace std;const int MAXN=1001;struct Data{ int J; int F; /* bool operator < (const Data& d) const { return d. } */ double price;};Data data[MAXN];bool Comp(const Data& a,const Data& b){ if(a.price>=b.price) return true; else return false;}//void Knapsack(int n,int m,int v[],int w[],int x[])void Knapsack(int n,int m){ //Sort(data,data+n,Comp); sort(data,data+n,Comp); int i; int c=m; double sum=0.0; for(i=0;i<n;i++) { if(c>=data[i].F) { c-=data[i].F; sum+=data[i].J; } else { sum+=c*1.0/data[i].F*data[i].J; c=0; } } printf("%.3f",sum); cout<<endl;}int main(){ //freopen("input.txt","r",stdin); int M,N; while(scanf("%d%d",&M,&N)!=EOF) { if(M==-1 && N==-1)break; for(int i=0;i<N;i++) { //cin>>J[i]>>F[i]; cin>>data[i].J>>data[i].F; data[i].price=data[i].J*1.0/data[i].F; } // Knapsack(N,M); } return 0;}
HDU 1009 -- greedy