第一问求最长下降子序列,不提;

第二问:借鉴了最短路的方法???

我们求出来了每个位置的最长下降子序列的长度,那么刻意这样这样转移

if f[i]==f[j]+1&&a[i]<a[j](i>j) 这代表f[i]可以由f[j]转移过来,所以 f[i]+=f[j]

但是会重复,所以当f[i]==f[j]&&a[i]==a[j]  时,说明f[j]中已经包括了f[i]中的所有转移,所以c[i]=0;

初值 当f[i]==1时,c[i]=1;

#include<iostream>
#include<cstdio>
#include<algorithm>
#define max(a,b) a>b?a:b
#define R register int
using namespace std;
const int N=;
int n;
int a[N],f[N],c[N];
inline int g() {
R ret=,fix=; register char ch; while(!isdigit(ch=getchar())) fix=ch=='-'?-:fix;
do ret=(ret<<)+(ret<<)+(ch^); while(isdigit(ch=getchar())); return ret*fix;
}
signed main() {
n=g();for(R i=;i<=n;i++) a[i]=g();
long long ans1=,ans2=;
for(R i=;i<=n;i++) {
f[i]=;
for(R j=;j<i;j++) if(a[i]<a[j]) f[i]=max(f[i],f[j]+);
ans1=max(ans1,f[i]);
}
for(R i=;i<=n;i++) {
if(f[i]==) c[i]=;
for(R j=;j<i;j++)
if(f[i]==f[j]+&&a[i]<a[j]) c[i]+=c[j];
else if(f[i]==f[j]&&a[i]==a[j]) c[i]=;
if(f[i]==ans1) ans2+=c[i];
}
printf("%lld %lld\n",ans1,ans2);
}

2019.04.28

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

  1. P1108 低价购买 (DP)

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

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

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

  3. Luogu[P1108] 低价购买

    \(Link\) \(\mathcal{\color{red}{Description}}\) 请你求出一个数列的最长下降子序列长度,并为此求出其方案数. \[1 \leq N \leq 5000\] ...

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

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

  5. 洛谷 P1108 低价购买

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

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

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

  7. P1108 低价购买(DP)

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

  8. 低价购买 dp

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

  9. 洛谷P1108 低价购买

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

随机推荐

  1. 今天写shader流光效果,shader代码少了个括号,unity shader compiler卡死且不提示原因

    今天写shader流光效果,shader代码少了个括号,unity shader compiler卡死且不提示原因 好在找到了原因,shader 代码如下,原理是提高经过的颜色亮度 void surf ...

  2. struts2 与 spring 整合

    1. 首先把所有jar包导入工程 2.在struts2的核心配置文件(在src文件目录下)中添加如下配置: <!-- 将Struts的对象交给Spring管理 所以需要导入Spring和Stru ...

  3. 在Ubuntu16.04上使用rz上传文件,XXX was skipped

    原本想把hadoop-2.8.5.tar.gz上传到/usr/local/src文件夹下,报错,was skipped 如下图: 换个文件夹位置,更换到本用户文件夹下,可以上传,说明是对文件夹操作权限 ...

  4. linux下的同步与互斥

    linux下的同步与互斥 谈到linux的并发,必然涉及到线程之间的同步和互斥,linux主要为我们提供了几种实现线程间同步互斥的 机制,本文主要介绍互斥锁,条件变量和信号量.互斥锁和条件变量包含在p ...

  5. tensorflow rank

    可把tensorflow 中的tensor 理解为一个n维数组或列表, tensor 为静态变量,拥有动态维度.在tf中, 只有tensor能在节点和图计算中传递.

  6. jqgrid 编辑表格(包含下拉框)

    .1在jqgrid 按钮 <asp:JQGridColumn TextAlign=" DataField="act" Visible="True" ...

  7. JavaScript——Dom编程(2)

    ①.创建一个元素节点: var reference = document.createElement(element) createElement(): 按照给定的标签名创建一个新的元素节点. 方法只 ...

  8. 第三周Linux编程实例练习

    通过以下程序来练习 head.h # ifndef HEAD_H #define HEAD_H #include <stdio.h> int add(int,int); int sub(i ...

  9. HDU 4430 Yukari's Birthday (二分)

    题意:有 n 个蜡烛,让你插到蛋糕上,每一层要插 k^i个根,第0层可插可不插,插的层数是r,让 r * k 尽量小,再让 r 尽量小,求r 和 k. 析:首先先列出方程来,一个是不插的一个是插的,比 ...

  10. iOS编程——Objective-C KVO/KVC机制[转]

    这两天在看和这个相关的的内容,全部推翻重写一个版本,这是公司内做技术分享的文档总结,对结构.条理做了更清晰的调整.先找了段代码,理解下,网上看到最多的一段的关于KVC的代码 先上代码 1.     1 ...