hdu 1009贪心
水题,直接贴代码
/* * hdu1009/win.cpp * Created on: 2012-7-27 * Author : ben */ #include <cstdio> #include <cstdlib> #include <cstring> #include <cmath> #include <ctime> #include <iostream> #include <algorithm> #include <queue> #include <set> #include <map> #include <stack> #include <string> #include <vector> #include <deque> #include <list> #include <functional> #include <numeric> #include <cctype> using namespace std; const int MAXN = 1005; typedef struct Warehouse{ double total; double need; }Warehouse; Warehouse wh[MAXN]; inline bool operator<(const Warehouse &wh1, const Warehouse &wh2) { return (wh1.total / wh1.need) > (wh2.total / wh2.need); } int main() { #ifndef ONLINE_JUDGE freopen("data.in", "r", stdin); #endif int N; double M, ans; while(scanf("%lf%d", &M, &N) == 2) { if(M == -1 && N == -1) { break; } for(int i = 0; i < N; i++) { scanf("%lf%lf", &wh[i].total, &wh[i].need); } sort(wh, wh + N); ans = 0; for(int i = 0; i < N; i++) { if(M <= 0) { break; } if(M >= wh[i].need) { ans += wh[i].total; M -= wh[i].need; }else { ans += M * wh[i].total / wh[i].need; M = 0; } } printf("%.3f\n", ans); } return 0; }