https://daniu.luogu.org/problemnew/show/2687

求方案数:

if(f[j]+1==f[i] && a[j]>a[i]) s[i]+=s[j];

因为序列相同算作同一种方案,所以把相同序列都集中在第一次出现的地方

if(f[i]==f[j] && a[i]==a[j]) break;

#include<cstdio>
#include<cstring>
#include<iostream>
#include<algorithm> using namespace std; #define N 5001 int a[N],f[N]; void read(int &x)
{
x=; char c=getchar();
while(!isdigit(c)) c=getchar();
while(isdigit(c)) { x=x*+c-''; c=getchar(); }
} struct node
{
int len;
int num[];
node()
{
len=;
memset(num,,sizeof(num));
} void operator = (int a)
{
len=;
num[]=a;
} void operator += (node p)
{
len=max(len,p.len);
for(int i=;i<=len;++i) num[i]+=p.num[i];
for(int i=;i<=len;++i)
if(num[i]>=)
{
num[i]-=;
num[i+]++;
}
if(num[len+]) len++;
} void print()
{
for(int i=len;i;--i) cout<<num[i];
}
}s[N],sum; int main()
{
int n;
read(n);
for(int i=;i<=n;++i) read(a[i]);
int max_len=;
a[]=1e9;
s[]=;
for(int i=;i<=n;++i)
{
for(int j=;j<i;++j)
if(a[j]>a[i] && f[j]>f[i]) f[i]=f[j];
f[i]++;
max_len=max(max_len,f[i]);
for(int j=i-;j>=;--j)
if(f[j]+==f[i] && a[j]>a[i]) s[i]+=s[j];
else if(f[i]==f[j] && a[i]==a[j]) break;
}
for(int i=;i<=n;++i)
if(f[i]==max_len) sum+=s[i];
cout<<max_len<<' ';
sum.print();
}

题目描述

“逢低吸纳”是炒股的一条成功秘诀。如果你想成为一个成功的投资者,就要遵守这条秘诀:

"逢低吸纳,越低越买"

这句话的意思是:每次你购买股票时的股价一定要比你上次购买时的股价低.按照这个规则购买股票的次数越多越好,看看你最多能按这个规则买几次。

给定连续的N天中每天的股价。你可以在任何一天购买一次股票,但是购买时的股价一定要比你上次购买时的股价低。写一个程序,求出最多能买几次股票。

以下面这个表为例, 某几天的股价是:

天数 1 2 3 4 5 6 7 8 9 10 11 12

股价 68 69 54 64 68 64 70 67 78 62 98 87

这个例子中, 聪明的投资者(按上面的定义),如果每次买股票时的股价都比上一次买时低,那么他最多能买4次股票。一种买法如下(可能有其他的买法):

天数 2 5 6 10

股价 69 68 64 62

输入输出格式

输入格式:

第1行: N (1 <= N <= 5000), 表示能买股票的天数。

第2行以下: N个正整数 (可能分多行) ,第i个正整数表示第i天的股价. 这些正整数大小不会超过longint(pascal)/long(c++).

输出格式:

只有一行,输出两个整数:

能够买进股票的天数和长度达到这个值的股票购买方案数量

在计算方案的数量的时候,如果两个方案的股价序列相同,那么这样的两个方案被认为是相同的(只能算做一个方案)。因此,两个不同的天数序列可能产生同一个股价序列,这样只能计算一次。

输入输出样例

输入样例#1: 复制

12
68 69 54 64 68 64 70 67
78 62 98 87
输出样例#1: 复制

4 2

[USACO4.3]逢低吸纳Buy Low, Buy Lower的更多相关文章

  1. 洛谷P2687 [USACO4.3]逢低吸纳Buy Low, Buy Lower

    P2687 [USACO4.3]逢低吸纳Buy Low, Buy Lower 题目描述 “逢低吸纳”是炒股的一条成功秘诀.如果你想成为一个成功的投资者,就要遵守这条秘诀: "逢低吸纳,越低越 ...

  2. Usaco 4.3.1 Buy Low, Buy Lower 逢低吸纳详细解题报告

    问题描述: "逢低吸纳"是炒股的一条成功秘诀.如果你想成为一个成功的投资者,就要遵守这条秘诀:  "逢低吸纳,越低越买"  这句话的意思是:每次你购买股票时的股 ...

  3. BUY LOW, BUY LOWER_最长下降子序列

    Description The advice to "buy low" is half the formula to success in the bovine stock mar ...

  4. USACO Section 4.3 Buy low,Buy lower(LIS)

    第一眼看到题目,感觉水水的,不就是最长下降子序列嘛!然后写……就呵呵了..要判重,还要高精度……判重我是在计算中加入各种判断.这道题比看上去麻烦一点,但其实还好吧.. #include<cstd ...

  5. POJ-1952 BUY LOW, BUY LOWER(线性DP)

    BUY LOW, BUY LOWER Time Limit: 1000MS Memory Limit: 30000K Total Submissions: 9244 Accepted: 3226 De ...

  6. USACO 4.3 Buy Low, Buy Lower

    Buy Low, Buy Lower The advice to "buy low" is half the formula to success in the stock mar ...

  7. poj1952 BUY LOW, BUY LOWER【线性DP】【输出方案数】

    BUY LOW, BUY LOWER Time Limit: 1000MS   Memory Limit: 30000K Total Submissions:11148   Accepted: 392 ...

  8. POJ 1952 BUY LOW, BUY LOWER 动态规划题解

    Description The advice to "buy low" is half the formula to success in the bovine stock mar ...

  9. [POJ1952]BUY LOW, BUY LOWER

    题目描述 Description The advice to "buy low" is half the formula to success in the bovine stoc ...

随机推荐

  1. Internet History, Technology and Security (Week4)

    Week4. We are now moving into Week 4! This week, we will be covering commercialization and growth. T ...

  2. Hadoop HA 深度解析

    社区hadoop2.2.0 release版本开始支持NameNode的HA,本文将详细描述NameNode HA内部的设计与实现. 为什么要Namenode HA? 1. NameNode High ...

  3. Java Lock & Condition

    /* jdk1.5以后将同步和锁封装成了对象. 并将操作锁的隐式方式定义到了该对象中, 将隐式动作变成了显示动作. Lock接口: 出现替代了同步代码块或者同步函数.将同步的隐式锁操作变成现实锁操作. ...

  4. C++ 类之间的互相调用

    这几天做C++11的线程池时遇到了一个问题,就是类A想要调用类B的方法,而类B也想调用类A的方法 这里为了简化起见,我用更容易理解的观察者模式向大家展开陈述 观察者模式:在对象之间定义一对多的依赖,这 ...

  5. Spring 计划 7.0

    Sprint回顾 让我们一次比一次做得更好.   1.回顾组织 主题:“我们怎样才能在下个sprint中做的更好?” 时间:设定为1小时. 参与者:整个团队. 场所:宿舍. 秘书:李新佳.    2. ...

  6. PAT 1147 Heaps

    https://pintia.cn/problem-sets/994805342720868352/problems/994805342821531648 In computer science, a ...

  7. Linux下CPU信息的查看

    逻辑CPU个数: cat /proc/cpuinfo | grep "processor" | wc -l     //32 物理CPU个数: cat /proc/cpuinfo ...

  8. es6 字符串String的扩展

    新特性:模板字符串 传统字符串 let name = "Jacky"; let occupation = "doctor"; //传统字符串拼接 let str ...

  9. P4314 CPU监控

    题面 这是一道堪称"线段树3"的线段树好题,对于\(lazy\)标记的操作可以说是非常巧妙 我们用结构体来记录\(lazy\)标记,结构体中定义\(a,b\)两个元素,\(a\)表 ...

  10. ORACLE创建映射

    create synonym table_name for aa.table_name