\(Link\)

\(\mathcal{\color{red}{Description}}\)

请你求出一个数列的最长下降子序列长度,并为此求出其方案数。

\[1 \leq N \leq 5000
\]

\(\mathcal{\color{red}{Solution}}\)

乍一看这个复杂度其实是卡死的……如果是\(n^2\)的话,我们的处理规模达到了\(25,000,000\),时限一秒的话……会感到很紧迫\(qwq\),但是的确能跑出来。

我们下来思索,对于最朴素的算法,如果不求方案数的话,是要用\(dp[i]\)表示到第\(i\)位的最长下降子序列长度,我们的纸张算法长这样:

for(i = 1; i <= N; i ++)
for(j = 1; j <= N; j ++){
if (base[i] < base[j]) dp[i] = max(dp[i], dp[j] + 1), ans = max(dp[i], ans);
}

那么,这样的话,对于第二问,我们就可以比较容易地求出方案数,做法是我们对第一问的DP数组再DP一次,就像这样:

for(i = 1; i <= N; i ++){
if(dp[i] == 1) f[i] = 1 ;
for(j = 1; j <= N: j ++)
if(base[i] < base[j] && dp[j] == dp[i] - 1) f[i] += f[j] ;
else if(base[i] == base[j] && dp[j] == dp[i]) f[i] = 0 ;
if(f[i] == ans) res ++ ;
}

嗯,这个应该挺好想的,本蒟唯一想错了的一点是,当时第二层循环里的else后面不应该是--应该是直接置为0才对qwq。

嗯,然后呢这就是\(n^2\)做法。但我一开始写的是\(nlogn\)做法,但是发现\(nlogn\)的话,第二问就不能在第一问的基础上dp了……真是件扫兴的事啊QAQ。

存一波代码\(qwq\)

    #include <cstdio>
#include <iostream>
#define MAXN 10010 using namespace std ;
int l, r, mid, i, j, ans ;
int Len = 1, N, base[MAXN], f[MAXN], dp[MAXN] ; inline int qr(){
int k = 0 ; char c = getchar() ;
while(!isdigit(c)) c = getchar() ;
while(isdigit(c)) k = (k << 1) + (k << 3) + c - 48, c = getchar();
return k ;
}
int main() {
N = qr( ) ;
for(i = 1; i <= N; i ++){base[i] = qr( ); f[i] = 1 ;}
for(i = 1; i <= N; i ++)
for(j = 1; j < i; j ++){
if(base[j] > base[i] && f[i] < f[j] + 1){
f[i] = f[j] + 1 ;
Len = max(Len, f[i]) ;
}
}
cout << Len << " " ;
for(i = 1; i <= N; i ++){
if(f[i] == 1) dp[i] = 1 ;
for(j = 1 ;j < i; j ++){
if(f[i] == f[j] + 1 && base[i] < base[j]) dp[i] += dp[j] ;
if(f[i] == f[j] && base[i] == base[j]) dp[i] = 0 ;
}
if(f[i] == Len) ans += dp[i] ;
}
cout << ans ;
return 0 ;
}

\(Xcode\)写出来的……画风诡异\(emmm\)

Luogu[P1108] 低价购买的更多相关文章

  1. Luogu P1108 低价购买 DP

    第一问求最长下降子序列,不提: 第二问:借鉴了最短路的方法??? 我们求出来了每个位置的最长下降子序列的长度,那么刻意这样这样转移 if f[i]==f[j]+1&&a[i]<a ...

  2. 洛谷 P1108 低价购买

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

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

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

  4. P1108 低价购买 (DP)

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

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

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

  6. P1108 低价购买(DP)

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

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

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

  8. 洛谷P1108 低价购买

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

  9. 洛谷P1108 低价购买题解

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

随机推荐

  1. Cause: com.microsoft.sqlserver.jdbc.SQLServerException: 不支持“variant”数据类型。

    mybatis执行sqlserver的sql报错 com.microsoft.sqlserver.jdbc.SQLServerException: 不支持“variant”数据类型. at com.m ...

  2. ES6学习笔记(三)-正则扩展

    PS: 前段时间转入有道云笔记,体验非常友好,所以笔记一般记录于云笔记中,每隔一段时间,会整理一下, 发在博客上与大家一起分享,交流和学习. 以下:

  3. 线程与全局解释器锁(GIL)

    一.线程概论 1.何为线程 每个进程有一个地址空间,而且默认就有一个控制线程.如果把一个进程比喻为一个车间的工作过程那么线程就是车间里的一个一个流水线. 进程只是用来把资源集中到一起(进程只是一个资源 ...

  4. Maven学习总结(八):Myecplise中配置maven

    第一步:下载maven安装包,配置环境变量M2_HOME;变量值为maven的解压目录. 第二步:在eclipse4.0之前的版本需要安装maven插件,方法即:将maven插件包复制到eclipse ...

  5. WinForm实现Rabbitmq官网6个案例-Routing

    代码: namespace RabbitMQDemo { public partial class Routing : Form { private string exchangeName = &qu ...

  6. C#代码处理网页关于登录的code

    作者:血饮狂龙链接:https://www.zhihu.com/question/49452639/answer/117294801来源:知乎著作权归作者所有,转载请联系作者获得授权. private ...

  7. [转]Apache的CRT格式SSL证书转换成IIS用的PFX格式

    转自:http://www.getvm.net/apache-crt-ssl-convert-to-iis-pfx/ Apache使用的SSL证书是.crt格式,如果你的网站从Apache换到了win ...

  8. FileWriter与BufferedWriter的适用场景

    IO这块,各种Writer,Reader,让人眼晕 而在网上基本找不到在什么时候用哪个类,并且网上的IO demo 很多用法都是错的 在这简单的分析一下FileWriter与BufferedWrite ...

  9. jquery使页面滚动到底部

    function scrollToEnd(){//滚动到底部 var h = $(document).height()-$(window).height(); $(document).scrollTo ...

  10. git 和github

    ssh git:    是一个版本管理工具,是可以在你电脑不联网的情况下,只在本地使用的一个版本管理工具,其作用就是可以让你更好的管理你的程序,比如你原来提交过的内容,以后虽然修改了,但是通过git这 ...