HDOJ 1009
贪心法,每次都尽可能的多买性价比高的物品。
1 #include <cstdio> 2 #include <algorithm> 3 4 using namespace std; 5 struct Room { 6 int food; 7 int javabean; 8 }; 9 10 bool cmp(struct Room r1, struct Room r2) 11 { 12 double d1 = (double)(r1.javabean)/(double)(r1.food); 13 double d2 = (double)(r2.javabean)/(double)(r2.food); 14 return d1 > d2; 15 } 16 struct Room room[1000]; 17 int main() 18 { 19 #ifdef LOCAL 20 freopen("data.in","r",stdin); 21 freopen("data.out","w",stdout); 22 #endif 23 int max_food,n; 24 int i; 25 double ret; 26 while (scanf("%d %d", &max_food,&n) == 2) { 27 if (max_food == -1 && n == -1) 28 break; 29 for(i=0; i<n; ++i) { 30 scanf("%d %d",&room[i].javabean,&room[i].food); 31 } 32 sort(room, room+n, cmp); 33 ret = 0.0; 34 for(i=0; i<n; ++i) { 35 if (max_food > room[i].food) { 36 ret += room[i].javabean; 37 max_food -= room[i].food; 38 } 39 else { 40 ret += (double)(room[i].javabean)/(double)(room[i].food)*max_food; 41 break; 42 } 43 } 44 printf("%.3f\n",ret); 45 } 46 return 0; 47 }
浙公网安备 33010602011771号