整体思路:整体思路就是以 JavaBean/CatFood比为基准,比值大的房间优先。使用结构体排序,结构体排序。
#include <iostream> #include <algorithm> #include <string> #include <map> #include <stdio.h> using namespace std; struct trade{ double a;//JavaBean double b;//CatFood double c; }fj[1000]; int compare(trade a,trade b){ return a.c > b.c; //运用结构体变量存储 } int main() { int m,n; double j,f,sum; while(1){ sum =0; cin >> m; cin >> n; if(m== -1 && n== -1){ break; } for(int i=0;i<n;i++){ cin >> j; cin >> f; fj[i].a=j; fj[i].b=f; fj[i].c=j/f; } sort(fj,fj+n,compare);//用结构体中的c变量的大小进行排序,注意这个是从大到小进行! for(int j=0; j<n; j++){ if(m - fj[j].b > 0.001){ sum+=fj[j].a; m-=fj[j].b; }//当m大于整体b时 else{ sum+=m*fj[j].a/fj[j].b; break; } } printf("%.3lf\n",sum); } return 0; }