1373:鱼塘钓鱼(fishing)

鱼塘钓鱼

如果知道了取到最大值的情况下,人最后在第i个鱼塘里钓鱼,那么用在路上的时间是固定的,因为我们不会先跑到第i个鱼塘里钓一分钟后再返回前面的鱼塘钓鱼,这样把时间浪费在路上显然不划算。
其实并不是模拟钓鱼的过程,只是统计出在各个鱼塘钓鱼的次数
只要确定了最大会经过的鱼塘(此时鱼塘间的移动耗时是固定的),就能通过堆实现在每个经过的鱼塘钓鱼的次数。

#include<iostream>
#include<cstdio>
#include<queue>
#define fish first
#define lake second
using namespace std;
priority_queue<pair<int,int>>heap;
const int N=105;
int t[N],f[N],d[N];
int maxx,t1;
void solve(){
	ios::sync_with_stdio(false);//加快cin读取速度
	cin.tie(0);
	int m,n;
	cin>>n;
	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];
	cin>>m;
	for(int i=1;i<=n;i++){
		int timee=m-t1,ans=0;
		for(int j=1;j<=i;j++)heap.push(make_pair(f[j],j));
		while(timee>0&&heap.top().fish>0){
			pair<int,int>a=heap.top();
			heap.pop();
			ans+=a.fish;
			a.fish-=d[a.lake];
			heap.push(a);
			timee--;
		}
		maxx=max(maxx,ans);
		t1+=t[i];
	}
	cout<<maxx;
}
int main(){
	solve();
	return 0;
}
posted @ 2021-09-23 20:07  Rekord  阅读(366)  评论(0编辑  收藏  举报