洛谷 P1108 低价购买(LIS,统计方案数)
传送门
解题思路
看第一个要求,很显然是求最长下降子序列,和LIS几乎一样,很简单,再看第二个问号,求最长下降子序列的方案数??这怎么求?
注意:当二种方案“看起来一样”时(就是说它们构成的价格队列一样的时候),这2种方案被认为是相同的。
这里就用到了一种基于dp的dp。
我们用a[i]存原来的数,f[i]存以第i个数结尾的最长下降子序列的长度,t[i]存以i结尾的最长下降子序列的方案数。
f[i]照常求,那么t[i]不能重复,怎么求呢?
首先,对于每一个i,枚举j=1...i-1。
- 若f[i]==f[j]且a[i]==a[j],这时f[i]的方案数是>=f[j]的,因为题目要求不能重复,所以我们把较小的那个t[j]定为0,t[i]不变,继续求。
- 若f[i]=f[j]+1且a[i]<a[j],也就是说f[j]这个序列的最后可以加上a[i]这个数,所以这时t[i]+=t[j],继承过t[i]的方案数。
最后,如果t[i]还是等于0,那么代表着a[i]不能成为任何一个序列的最后一个数,说明a[i]是到目前为止的最大的数,这时t[i]赋值为1。
最后统计出答案即可。
AC代码
#include<iostream>
#include<cstdio>
using namespace std;
const int maxn=;
int a[maxn],f[maxn],t[maxn];
//a[i]存原来的数,f[i]存以第i个数结尾的最长下降子序列的长度,
//t[i]存以i结尾的最长下降子序列的方案数
int n,maxf;
long long ans;
int main()
{
cin>>n;
for(int i=;i<=n;i++) scanf("%d",&a[i]);
for(int i=;i<=n;i++){
for(int j=;j<i;j++){
if(a[i]<a[j]) f[i]=max(f[i],f[j]+);
}
if(f[i]==) f[i]=;
maxf=max(maxf,f[i]);
for(int j=;j<i;j++){
if(f[i]==f[j]&&a[i]==a[j]){
t[j]=;
}
if(f[i]==f[j]+&&a[i]<a[j]){
t[i]+=t[j];
}
}
if(t[i]==) t[i]=;
}
for(int i=;i<=n;i++){
if(f[i]==maxf) ans+=t[i];
}
cout<<maxf<<" "<<ans;
return ;
}
洛谷 P1108 低价购买(LIS,统计方案数)的更多相关文章
- 洛谷P1108 低价购买[DP | LIS方案数]
题目描述 “低价购买”这条建议是在奶牛股票市场取得成功的一半规则.要想被认为是伟大的投资者,你必须遵循以下的问题建议:“低价购买:再低价购买”.每次你购买一支股票,你必须用低于你上次购买它的价格购买它 ...
- 洛谷 P1108 低价购买 解题报告
P1108 低价购买 题目描述 "低价购买"这条建议是在奶牛股票市场取得成功的一半规则.要想被认为是伟大的投资者,你必须遵循以下的问题建议:"低价购买:再低价购买&quo ...
- 洛谷 P1108 低价购买
P1108 低价购买 标签 动态规划 难度 提高+/省选- 题目描述 "低价购买"这条建议是在奶牛股票市场取得成功的一半规则.要想被认为是伟大的投资者,你必须遵循以下的问题建议:& ...
- 洛谷P1108 低价购买
题目描述 “低价购买”这条建议是在奶牛股票市场取得成功的一半规则.要想被认为是伟大的投资者,你必须遵循以下的问题建议:“低价购买:再低价购买”.每次你购买一支股票,你必须用低于你上次购买它的价格购买它 ...
- 洛谷P1108 低价购买 (最长下降子序列方案数)(int,long long等 范围)
这道题用n方的算法会很好做 我一开始想的是nlogn的算法求方案数, 然后没有什么想法(实际上也可以做,但是我太弱了)我们就可以根据转移方程来推方案数,只是把max改成加,很多动规题 都是这样,比如背 ...
- 洛谷P1108 低价购买题解
看到"你必须用低于你上次购买它的价格购买它",有没有想到什么?没错,又是LIS,倒过来的LIS,所以我们只要把读入的序列倒过来就可以求LIS了,第一问解决. 首先要厘清的是,对于这 ...
- P1108 低价购买——最长下降子序列+方案数
P1108 低价购买 最长下降子序列不用多讲:关键是方案数: 在求出f[i]时,我们可以比较前面的f[j]; 如果f[i]==f[j]&&a[i]==a[j] 要将t[j]=0,去重: ...
- P1108 低价购买 (DP)
题目 P1108 低价购买 解析 这题做的我身心俱惫,差点自闭. 当我WA了N发后,终于明白了这句话的意思 当二种方案"看起来一样"时(就是说它们构成的价格队列一样的时候),这2种 ...
- P1108 低价购买(DP)
题目描述 "低价购买"这条建议是在奶牛股票市场取得成功的一半规则.要想被认为是伟大的投资者,你必须遵循以下的问题建议:"低价购买:再低价购买".每次你购买一支股 ...
随机推荐
- mysql 5.0存储过程学习总结
mysql存储过程的创建,删除,调用及其他常用命令 本人qq群也有许多的技术文档,希望可以为你提供一些帮助(非技术的勿加). QQ群: 281442983 (点击链接加入群:http://jq.q ...
- SQL查询语句备忘录
有关于SQL查询的相关语句和语法的记录!备忘与复习用 1.SQL多表联合查询 select a.字段1,a.字段2,b,字段2 from 表1 a,表2 b where a.字段1 =b.字段1 2. ...
- py-R-FCN的caffe配置(转)
参考:https://blog.csdn.net/wei_guo_xd/article/details/74451443 下载程序,git clone https://github.com/Orpin ...
- postman基础
Postman使用场景: 开发接口的时候需要快速的调用接口,以便调试 测试的时候需要非常方便的调用接口,通过不同的参数去测试接口的输出 这些接口调用是需要保存下来的反复运行的 在运行过程中如果有断言( ...
- linux运维、架构之路-Git+Jenkins实现自动化部署
一.Jenkins介绍 jenkins是一个用JAVA编写的开源的持续集成工具,运行在servlet容器中,支持软件配置管理(SCM)工具,可以执行基于APACHE ANT和APAC ...
- JS循环结构
什么是循环结构? 反复一遍又一遍做着相同(相似)的事情 循环结构的两大要素? 循环条件:什么时候开始,什么时候结束 循环操作:循环体,循环过程中 做了什么 一.while语句 while语句 属于前测 ...
- 批量下载文件JSP
最近项目有个需求,用户想对挂有附件的数据记录 实现一键下载全部附件(目前项目仅支持每次点击单条记录进行附件下载),下面记录我实现的解决方案.项目框架基于SSMservice业务实现层(impl):// ...
- JSP上传整个文件夹
文件上传是最古老的互联网操作之一,20多年来几乎没有怎么变化,还是操作麻烦.缺乏交互.用户体验差. 一.前端代码 英国程序员Remy Sharp总结了这些新的接口 ,本文在他的基础之上,讨论在前端采用 ...
- Jquery TextBox进入focus的时候 改变background-color
<!DOCTYPE html><html><head><script src="/jquery/jquery-1.11.1.min.js" ...
- 深入探究JVM(2) - 探秘Metaspace
Java 8彻底将永久代移除出了HotSpot JVM,将其原有的数据迁移至Java Heap或Metaspace.这一篇文章我们来总结一下Metaspace(元空间)的特性.如有错误,敬请指出,谢谢 ...