Run ID 作者 问题 语言 测评结果 时间 内存 代码长度 提交时间
88773 sh25_zhangyj 钓鱼 C++ 无测评数据 0 MS 0 KB 1643 2026-05-15 15:40:00

Tests(0/0):


#include <iostream> #include <vector> #include <queue> #include <algorithm> using namespace std; struct Pond { int fish; int dec; Pond(int f, int d) : fish(f), dec(d) {} bool operator<(const Pond& other) const { return fish < other.fish; // 大顶堆 } }; int main() { int n, h; cin >> n >> h; int T = h * 12; // 换算成5分钟单位 vector<int> F(n), D(n), t(n-1); for (int i = 0; i < n; ++i) cin >> F[i]; for (int i = 0; i < n; ++i) cin >> D[i]; for (int i = 0; i < n-1; ++i) cin >> t[i]; int max_fish = 0; int travel_time = 0; // 走到第k个池塘的路上耗时 // 枚举最远走到第k个池塘(k从0到n-1) for (int k = 0; k < n; ++k) { int time_left = T - travel_time; if (time_left <= 0) break; // 路上时间就超过总时间了,无法钓鱼 priority_queue<Pond> pq; for (int i = 0; i <= k; ++i) { pq.push(Pond(F[i], D[i])); } int current_fish = 0; for (int i = 0; i < time_left; ++i) { Pond p = pq.top(); pq.pop(); if (p.fish <= 0) break; // 没有鱼了,直接结束 current_fish += p.fish; p.fish -= p.dec; pq.push(p); } if (current_fish > max_fish) { max_fish = current_fish; } // 更新走到下一个池塘的路上时间 if (k < n-1) { travel_time += t[k]; } } cout << max_fish << endl; return 0; }