钓鱼

link

只能说很多重要的贪心思想我是……真的不知道啊,鬼知道去年S的T3我是怎么搞出来的。

这道题提供的思想就是如何解决这类有限制的朴素贪心。会发现这道题如果没有路上时间的限制就是一个贪心,把所有贡献丢进一个小根堆里每次选一个,减去变化值再丢进去即可。然而现在有了路上时间,我们要做的就是考虑如何预先处理掉这些路上花费的时间,于是想到了枚举,固定只能钓前i个池子的鱼然后减去路上时间之后就是朴素贪心了。

#include<bits/stdc++.h>
//#define zczc
const int N=110;
using namespace std;
inline void read(int &wh){
    wh=0;int f=1;char w=getchar();
    while(w<'0'||w>'9'){if(w=='-')f=-1;w=getchar();}
    while(w<='9'&&w>='0'){wh=wh*10+w-'0';w=getchar();}
    wh*=f;return;
}
inline int max(int s1,int s2){
	return s1<s2?s2:s1;
}

int m,n,ans,an,a[N],b[N],t[N];
struct node{
	int id,data;
};
inline bool operator <(node s1,node s2){
	return s2.data>s1.data;
}
priority_queue<node>q;

signed main(){
	
	#ifdef zczc
	freopen("in.txt","r",stdin);
	#endif
	
	read(m);read(n);n*=12;
	for(int i=1;i<=m;i++)read(a[i]);
	for(int i=1;i<=m;i++)read(b[i]);
	for(int i=2;i<=m;i++)read(t[i]);
	for(int i=1;i<=m;i++){
		n-=t[i];an=0;
		while(!q.empty())q.pop();
		for(int j=1;j<=i;j++)q.push((node){j,a[j]});
		for(int j=1;j<=n;j++){
			if(q.empty())break;
			node now=q.top();q.pop();
			an+=now.data;now.data-=b[now.id];
			if(now.data>0)q.push(now);
		}
		ans=max(ans,an);
	}
	printf("%d",ans);
	
	return 0;
}
posted @ 2022-06-27 21:09  Feyn618  阅读(9)  评论(0编辑  收藏  举报