满分求调
  • 板块P1717 钓鱼
  • 楼主molakeser
  • 当前回复1
  • 已保存回复1
  • 发布时间2024/9/16 11:32
  • 上次更新2024/9/16 15:20:06
查看原帖
满分求调
1218138
molakeser楼主2024/9/16 11:32

好奇怪的标题啊。。。

#include <bits/stdc++.h>

using namespace std;
#define int long long
const int N=1e4;
int n,h,m,f[N],d[N],t[N],t1,mx;
struct node
{
    int fish,lake;
} heap[N];
void maintain(int i,int k)
{
    node a=heap[i];
    int next=i*2;
    while(next<=k)
    {
        if(next<k&&heap[next].fish<heap[next+1].fish)
            next++;
        if(a.fish<heap[next].fish)
        {
            heap[i]=heap[next];
            i=next;
            next*=2;
        }
        else
            break;
    }
    heap[i]=a;
}
signed main()
{
    cin>>n>>h;
    m=h*60;
    for(int i=1; i<=n; i++)
        cin>>f[i];
    for(int i=1; i<=n; i++)
        cin>>d[i];
    for(int i=1; i<n; i++)
        cin>>t[i],t[i]*=5;

    for(int k=1; k<=n; k++)
    {
        int time=m-t1,ans=0;
        for(int i=1; i<=k; i++)
        {
            heap[i].fish=f[i];
            heap[i].lake=i;
        }
        for(int i=1; i<=k/2; i++)
            maintain(i,k);
        while(time>=5&&heap[1].fish>0)
        {
            ans+=heap[1].fish;
            heap[1].fish-=d[heap[1].lake];
            maintain(1,k);
            time-=5;
        }
        mx=max(mx,ans);
        t1+=t[k];
    }
    cout<<mx;
    return 0;
}
2024/9/16 11:32
加载中...