打表
要注意不到7月前和8月后的情况
同时注意“0号”等特殊情况
#include <cstdio> #include <algorithm> using namespace std; #define REP(n) for(int o=0;o<n;o++) class LOVE { private: static const int maxn = 25; int M, N; struct node { int T, V; double p; }paper[maxn]; static bool compare_node(node a, node b) { return a.p > b.p; } public: bool Do() { scanf("%d%d", &M, &N); if (M == 0 && N == 0)return false; REP(M) { int T, V; scanf("%d%d", &T, &V); paper[o].T = T; paper[o].V = V; paper[o].p = (double)V / (double)T; } sort(paper, paper + M, compare_node); //REP(M) //printf("T=%d V=%d p=%f\n", paper[o].T, paper[o].V, paper[o].p); double ans = 0; for (int i = 0; i < M; i++) { int temp = N - paper[i].T; ans += paper[i].V; if (temp < 0) { ans += temp*paper[i].p; break; } N = temp; } printf("%.2f\n", ans); return true; } }; int main() { LOVE LIVE; while (LIVE.Do()); return 0; }