• 钓鱼


    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;
    }
    
  • 相关阅读:
    UVa 482
    UVa 10360
    UVa 10812
    UVa 10420
    UVa 573
    UVa 357
    UVa 147
    UVa 674
    郑厂长系列故事——逃离迷宫 HDU4524
    威威猫系列故事——过生日 HDU 4523
  • 原文地址:https://www.cnblogs.com/dai-se-can-tian/p/16417548.html
Copyright © 2020-2023  润新知