题目描述

“低价购买”这条建议是在奶牛股票市场取得成功的一半规则。要想被认为是伟大的投资者,你必须遵循以下的问题建议:“低价购买;再低价购买”。每次你购买一支股票,你必须用低于你上次购买它的价格购买它。买的次数越多越好!你的目标是在遵循以上建议的前提下,求你最多能购买股票的次数。你将被给出一段时间内一支股票每天的出售价(2^16范围内的正整数),你可以选择在哪些天购买这支股票。每次购买都必须遵循“低价购买;再低价购买”的原则。写一个程序计算最大购买次数。

这里是某支股票的价格清单:

日期 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个数,是每天的股票价格。

输出格式:

输出文件仅一行包含两个数:最大购买次数和拥有最大购买次数的方案数(<=2^31)当二种方案“看起来一样”时(就是说它们构成的价格队列一样的时候),这2种方案被认为是相同的。

输入输出样例

输入样例#1:

BUYLOW.IN
12
68 69 54 64 68 64 70 67 78 62 98 87
输出样例#1:

BUYLOW.OUT
4 2

看到"提高+"难度就试着做了下

然而只是个升级版的LIC?

f[序号]=最长长度

c[序号]=方法数量

当f[i]=f[j]+1,且数字满足大小关系时,c[i]+=c[j]

当f[i]=f[j],且数字相等时,c[j]=0,避免重复计算

 #include<iostream>
#include<cstdio>
#include<algorithm>
#include<cmath>
using namespace std;
long long f[];
long long c[];
int cnt=;
int n;
long long a[];
int main(){
scanf("%d",&n);
int i,j;
for(i=;i<=n;i++){
scanf("%d",&a[i]);
}
int max1=;
for(i=;i<=n;i++){
for(j=;j<i;j++) if(a[i]<a[j] && f[i]<f[j]+)f[i]=f[j];
f[j]++;
if(f[j]==)c[j]=;
for(j=;j<i;j++){
if(a[i]<a[j] && f[i]==f[j]+){
c[i]+=c[j];
}
else if(a[i]==a[j] && f[i]==f[j]) c[j]=;
}
if(f[i]>max1)max1=f[i];
} for(i=;i<=n;i++){
if(f[i]==max1)cnt+=c[i];
}
printf("%d %d",max1,cnt);
return ;
}

洛谷P1108 低价购买的更多相关文章

  1. 洛谷 P1108 低价购买

    P1108 低价购买 标签 动态规划 难度 提高+/省选- 题目描述 "低价购买"这条建议是在奶牛股票市场取得成功的一半规则.要想被认为是伟大的投资者,你必须遵循以下的问题建议:& ...

  2. 洛谷 P1108 低价购买 解题报告

    P1108 低价购买 题目描述 "低价购买"这条建议是在奶牛股票市场取得成功的一半规则.要想被认为是伟大的投资者,你必须遵循以下的问题建议:"低价购买:再低价购买&quo ...

  3. 洛谷P1108 低价购买[DP | LIS方案数]

    题目描述 “低价购买”这条建议是在奶牛股票市场取得成功的一半规则.要想被认为是伟大的投资者,你必须遵循以下的问题建议:“低价购买:再低价购买”.每次你购买一支股票,你必须用低于你上次购买它的价格购买它 ...

  4. 洛谷P1108 低价购买题解

    看到"你必须用低于你上次购买它的价格购买它",有没有想到什么?没错,又是LIS,倒过来的LIS,所以我们只要把读入的序列倒过来就可以求LIS了,第一问解决. 首先要厘清的是,对于这 ...

  5. 洛谷P1108 低价购买 (最长下降子序列方案数)(int,long long等 范围)

    这道题用n方的算法会很好做 我一开始想的是nlogn的算法求方案数, 然后没有什么想法(实际上也可以做,但是我太弱了)我们就可以根据转移方程来推方案数,只是把max改成加,很多动规题 都是这样,比如背 ...

  6. 洛谷 P1108 低价购买(LIS,统计方案数)

    传送门 解题思路 看第一个要求,很显然是求最长下降子序列,和LIS几乎一样,很简单,再看第二个问号,求最长下降子序列的方案数??这怎么求? 注意:当二种方案“看起来一样”时(就是说它们构成的价格队列一 ...

  7. 洛谷 P2616 [USACO10JAN]购买饲料II Buying Feed, II

    洛谷 P2616 [USACO10JAN]购买饲料II Buying Feed, II https://www.luogu.org/problemnew/show/P2616 题目描述 Farmer ...

  8. P1108 低价购买 (DP)

    题目 P1108 低价购买 解析 这题做的我身心俱惫,差点自闭. 当我WA了N发后,终于明白了这句话的意思 当二种方案"看起来一样"时(就是说它们构成的价格队列一样的时候),这2种 ...

  9. P1108 低价购买——最长下降子序列+方案数

    P1108 低价购买 最长下降子序列不用多讲:关键是方案数: 在求出f[i]时,我们可以比较前面的f[j]; 如果f[i]==f[j]&&a[i]==a[j] 要将t[j]=0,去重: ...

随机推荐

  1. 转:webRTC的前世今生

    https://blog.coding.net/blog/getting-started-with-webrtc

  2. 安装grunt

    1,npm install -g grunt-cli 2,npm install grunt --save 作为项目的依赖安装 这两步必不可少

  3. Linux 进程通信(共享内存区)

    共享内存是由内核出于在多个进程间交换信息的目的而留出的一块内存区(段). 如果段的权限设置恰当,每个要访问该段内存的进程都可以把它映像到自己的私有地址空间中. 如果一个进程更新了段中的数据,其他进程也 ...

  4. C语言 预处理一(文件包含--#include)

    //预处理命令不需要在结束末尾加":" //#inlude可以包含任意类型的文件 //#inlude 将一个源文件的全部内容包含到另一个源文件中,成为它的一个部分,文件包含的一般格 ...

  5. [转]仿World Wind构造自己的C#版插件框架——WW插件机制精简改造

    很久没自己写东西啦,早该好好总结一下啦!一个大师说过“一个问题不应该被解决两次!”,除了一个好脑筋,再就是要坚持总结. 最近需要搞个系统的插件式框架,我参照World Wind的插件方式构建了个插件框 ...

  6. Eclipse下配置tomcat且使用eclipse开启debug模式,集成JAD反编译插件

    Eclipse运行Tomcat的2种方式 eclipse启动Tomcat服务输入http://localhost:8080/报404解决方法 Eclipse 中Tomcat 启动 与直接启动Tomca ...

  7. JavaScript及其异步实现

    由于javascript本身是单线程模型,这里主要通过Callbacks,Listeners,Control Flow Libraries ,Promises四种方式来实现异步操作. Referenc ...

  8. MySQL系列——几个常用的mysql命令

    1:使用SHOW语句找出在服务器上当前存在什么数据库:mysql> SHOW DATABASES;2:2.创建一个数据库MYSQLDATAmysql> CREATE DATABASE MY ...

  9. Linux(9.14-9.20)学习笔记

    实验一 Linux系统简介 一.Linux 为何物 Linux 就是一个操作系统,Linux 也就是系统调用和内核那两层. 二.Linux 历史简介 操作系统始于二十世纪 50 年代,当时的操作系统能 ...

  10. 使用AChartEngine第一步:在项目中配置AChartEngine环境

    1. 从AChartEngine官网上下载acharengine的jar文件包. 地址:https://code.google.com/p/achartengine/downloads/list 2. ...