AcWing 1262. 鱼塘钓鱼(每日一题)

#include <iostream>
#include <map>
#include <vector>
#include <queue>
using namespace std;
vector<int> fish, myDistance;
map<int,int> myMap;
int n, t;
priority_queue<int> myQueue;
int solve(int time, int i)
{
    //cout << time << "  and  " << i << endl;
    int ans = 0;

    for(int k = fish[i]; k >= 0; k -= myMap[i])
    {
        myQueue.push(k);
    }
    priority_queue<int> temp = myQueue;
    for(int k = time; k > 0 && !temp.empty(); k --)
    {
        ans += temp.top();
        temp.pop();
    }
    return ans;
}


int main()
{
    cin >> n;
    fish.resize(n + 1);
    myDistance.resize(n + 2);
    for(int i = 1; i <= n; i ++) cin >> fish[i];
    for(int i = 1; i <= n; i ++)
    {
        int temp;
        cin >> temp;
        myMap.insert({i,temp});
    }
    myDistance[0] = 0;
    for(int i = 1; i <= n - 1; i ++)
    {
        cin >> myDistance[i];
        myDistance[i] = myDistance[i] + myDistance[i - 1];
    }

    cin >> t;
    int res = -9999;
    for(int i = 1; i <= n; i ++)
    {
        int remainTime = t;
        remainTime -= myDistance[i - 1];
        if(remainTime > 0)
            res = max(solve(remainTime, i), res);
    }

    cout << res;
    return 0;
}

作者:Yuze_Neko
链接:https://www.acwing.com/file_system/file/content/whole/index/content/12720227/
来源:AcWing
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。


贪心 + 前缀和 + 优先队列
时间最坏O(2n + n^2)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值