zoukankan      html  css  js  c++  java
  • zoj 2921 Stock(贪心)

    Optiver sponsored problem.

    After years of hard work Optiver has developed a mathematical model that allows them to predict wether or not a company will be succesful. This obviously gives them a great advantage on the stock market.

    In the past, Optiver made a deal with a big company, which forces them to buy shares of the company according to a fixed schedule. Unfortunately, Optiver's model has determined that the company will go bankrupt after exactly n days, after which their shares will become worthless.

    Still, Optiver holds a large number of sell options that allows them to sell some of the shares before the company goes bankrupt. However, there is a limit on the number of shares Optiver can sell every day, and price Optiver receives for a share may vary from day to day. Therefore, it is not immediately clear when Optiver should sell their shares to maximize their profit, so they asked you to write a program to calculcate this.

    Input

    On the first line an integer t (1 <= t <= 100): the number of test cases. Then for each test case:

    One line with an integer n (1 <= n <= 100 000): the number of days before the company goes bankrupt.

    n lines with three integers xi (0 <= xi <= 100), pi (0 <= pi <= 100) and mi (0 <= mi <= 10 000 000): the number of shares Optiver receives on day i, the (selling) price per share on day i, and the maximum number of shares Optiver can sell on day i, respectively.

    Output

    For each test case:

    One line with the maximum profit Optiver can achieve.

    Sample Input

    1
    6
    4 4 2
    2 9 3
    2 6 3
    2 5 9
    2 2 2
    2 3 3

    Sample Output

    76


    题意:有n张股票,给出每天股票的买进数量。当天的股票价格和当天最大抛出量,第i天得到的股票当天能够不抛,能够留到以后抛。

    问这n天最多能卖多少钱?

    思路:贪心。从后往前贪心,最后一天的股票当然仅仅能在最后一天卖出。第i天的能够在第i天及以后卖出,那么就能够维护一个优先队列来存放第i天及以后的天数中抛出量不为零的日期(价格高的优先)。那抛出第i天时先从优先队列中取出价格最高的。



    #include<iostream>
    #include<cstdio>
    #include<cstring>
    #include<algorithm>
    #include<cmath>
    #include<queue>
    #include<stack>
    #include<vector>
    #include<set>
    #include<map>
    
    
    #define L(x) (x<<1)
    #define R(x) (x<<1|1)
    #define MID(x,y) ((x+y)>>1)
    
    #define eps 1e-8
    //typedef __int64 ll;
    
    #define fre(i,a,b)  for(i = a; i <b; i++)
    #define mem(t, v)   memset ((t) , v, sizeof(t))
    #define sf(n)       scanf("%d", &n)
    #define sff(a,b)    scanf("%d %d", &a, &b)
    #define sfff(a,b,c) scanf("%d %d %d", &a, &b, &c)
    #define pf          printf
    #define bug         pf("Hi
    ")
    
    using namespace std;
    
    #define INF 0x3f3f3f3f
    #define N 100005
    
    int r[N],p[N],s[N];
    int n;
    
    
    struct stud{
     int p,num;
     friend  bool operator < (stud a,stud b)
        {
        	return a.p<b.p;
    	}
    };
    
    priority_queue<stud>q;
    
    
    void solve()
    {
    	int i,j;
    	while(!q.empty()) q.pop();
    
    	int ans=0;
    
    	struct stud cur;
    
    	for(i=n-1;i>=0;i--)
    	{
            cur.num=s[i];
            cur.p=p[i];
            q.push(cur);
    
    		while(!q.empty()&&r[i])
    		{
    		   	 cur=q.top();
    
    		   	 q.pop();
    
    		   	 if(cur.num>r[i])
    			 {
    			 	ans+=cur.p*r[i];
    			 	//pf("%d %d
    ",cur.p,r[i]);
    			 	cur.num-=r[i];
    			 	r[i]=0;
    			 	q.push(cur);
    			 }
                 else
    			 {
    			 	ans+=cur.p*cur.num;
    			 	r[i]-=cur.num;
    			 //	pf("%d %d
    ",cur.p,cur.num);
    
    			 }
    		}
    
    	}
    
    	pf("%d
    ",ans);
    }
    int main()
    {
    	int i,j,t;
    	sf(t);
    	while(t--)
    	{
    		sf(n);
    		fre(i,0,n)
    		 sfff(r[i],p[i],s[i]);
            solve();
    	}
       return 0;
    
    }
    
    
    













  • 相关阅读:
    关于sqlserver2008 bcp根据数据表导出xml格式文件的小记
    关于SQL SERVER 2008 X64版本报错:消息 7302,级别 16,无法创建链接服务器 "(null)" 的 OLE DB 访问接口 "Microsoft.ACE.OLEDB.12.0" 的实例。
    Response.Redirect(),Server.Transfer(),Server.Execute()的区别[转]
    ASP.net应用程序中如何调用客户端的Javascript脚本小结(转)
    重写ListView控件,实现点击列头排序的功能
    关于Response.redirect和Response.End出现线程中止异常的处理(转)
    持续集成cruisecontrol.net学习总结
    [转]关于PowerDesigner反向工程SQL Server2000数据库时生成注释的解决方法
    敏捷开发scrum学习笔记一
    asp.net缓存机制总结(转)
  • 原文地址:https://www.cnblogs.com/claireyuancy/p/6724031.html
Copyright © 2011-2022 走看看