#P1952. BUY LOW, BUY LOWER

BUY LOW, BUY LOWER

题目描述:

在牛市中,“逢低买入” 这条建议只是成功公式的一半。要想成为一名伟大的投资者,你还必须遵循这个问题所给出的建议:“逢低买入;在更低点买入”

每次你购买股票时,都必须以比上一次购买时更低的价格买入。你以比之前更低的价格买入的次数越多,那就越好!你的目标是看看你能够连续以越来越低的价格购买多少次。

你会得到一只股票在一段时间内每天的卖出价格(正的 1616 位整数)。你可以选择在任何一天购买股票。每次你选择购买时,价格必须严格低于你上一次购买股票时的价格。编写一个程序,确定你应该在哪些天购买股票,以便使你购买的次数最大化。

以下是一份股票价格列表:

Day:    1  2  3  4  5  6  7  8  9 10 11 12

Price: 68 69 54 64 68 64 70 67 78 62 98 87

(至少就这个问题而言)最厉害的投资者,如果每次购买的价格都比上一次更低,最多可以购买四次。一个符合要求的四天购买序列(可能还有其他序列)是:

Day:    2  5  6 10

Price: 69 68 64 62

输入:

第一行:NN1<=N<=50001 <= N <= 5000),即给出股票价格的天数。

第二行及后续行:一系列由空格分隔的 NN 个整数,除了最后一行可能整数数量较少外,其余每行有 1010 个整数。

输出:

在一行中输出两个整数:

第一个整数表示价格递减的最长序列的长度

第二个整数表示具有该长度的序列的数量(保证可以用 3131 位整数表示)

在统计解决方案的数量时,如果两个潜在的解决方案重复了相同的递减价格字符串,也就是说,当比较连续的价格时它们 “看起来一样”,那么这两个解决方案会被视为相同的(并且只会算作一个解决方案)。因此,两个不同的 “购买” 日期序列可能会产生相同的递减价格字符串,而这种情况只会被算作一个解决方案。

输入数据1

12
68 69 54 64 68 64 70 67 78 62
98 87

输出数据1

4 2

来源:

美国计算机奥林匹克竞赛(USACO)2002 年 2 月赛