zoukankan      html  css  js  c++  java
  • 楼间跳跃

    题目链接

    枚举最远跳到哪栋楼,这栋楼前面的所有楼里面选最大的几个加上

    #include<bits/stdc++.h>
    using namespace std;
    long long h[1000100],v[1000010];
    priority_queue<pair<int,int>,vector<pair<int,int> >,greater<pair<int,int> > >q;
    long long s[1000100];
    int main()
    {
    	s[0]=0;
    	long long n,m,ans=0,sum=0;
    	cin>>n>>m;m++;
    	for(long long i=1;i<=n;i++)
    	{
    		cin>>h[i]>>v[i];
    		s[i]=s[i-1]+v[i];
    	}
    	for(long long i=1;i<=n;i++)
    	{
    		m-=h[i];
    		q.push(make_pair(v[i],h[i]-1));
    		sum+=v[i]*h[i];
    		while(!q.empty()&&m<0)
    		{
    			long long x=q.top().first,y=q.top().second;
    			q.pop();
    			if(y<=-m)
    			{
    				sum-=x*y;
    				m+=y;
    			}
    			else
    			{
    				q.push(make_pair(x,y+m));
    				sum+=x*m;
    				m=0;
    			}
    		}
    		ans=max(ans,sum);
    	}
    	cout<<ans;
    	return 0;
    }
    
  • 相关阅读:
    客户端加锁
    三次握手
    ForkJoinTask
    主从Reactor多线程模型
    Happen-before
    Enum
    Java 8
    Netty
    分布式一致性算法
    VisualStudio 2013 快捷键
  • 原文地址:https://www.cnblogs.com/qwq-/p/13652947.html
Copyright © 2011-2022 走看看