$Poj1952\ $洛谷$1687\ Buy\ Low,Buy\ Lower$ 线性$DP+$方案计数
Description
求一个长度为n的序列a的最长下降子序列的长度,以及这个长度的子序列种数,注意相同的几个子序列只能算作一个子序列.
n<=5000,a[i]不超过long范围
Sol
求最长下降子序列的长度: 1.f[i]表示以a[i]结尾的最长下降子序列长度
2.f[i]表示以i结尾的最长下降子序列长度
第一种适用于n比较小的,第二种则适用于n大而a[i]小的,这题显然用第一种吧,而且第一种更方便计数
用num[i]表示以a[i]结尾的长度为f[i]的子序列个数
还需注意的是,这题要去重.
所以更新num[i]数组,j从1循环到i-1时,遇到a[i]==a[j]&&f[i]==f[j]的情况num[i]-=num[j]就好了
因为,在这样的情况中,num[j]所记录的子序列一定也被包含在num[i]中
Code
#include<iostream>
#include<cstdio>
#include<cstring>
#define Rg register
#define il inline
#define db double
#define ll long long
#define mem(a,b) memset(a,b,sizeof(a));
#define go(i,a,b) for(Rg int i=a;i<=b;++i)
#define yes(i,a,b) for(Rg int i=a;i>=b;--i)
using namespace std;
il int read()
{
int x=,y=;char c=getchar();
while(c<''||c>''){if(c=='-')y=-;c=getchar();}
while(c>=''&&c<=''){x=(x<<)+(x<<)+c-'';c=getchar();}
return x*y;
}
const int N=;
int n,ans1,p[N],l[N];//price length
db ans2,nm[N];//number
int main()
{
n=read();
go(i,,n)p[i]=read(),l[i]=;
go(i,,n)
{
go(j,,i-)if(p[j]>p[i])l[i]=max(l[i],l[j]+);
if(l[i]==)nm[i]=;
go(j,,i-)
{
if(p[i]==p[j]&&l[i]==l[j])nm[i]-=nm[j];
if(p[j]>p[i]&&l[j]+==l[i])nm[i]+=nm[j];
}
}
go(i,,n)if(l[i]>ans1)ans1=l[i];
go(i,,n)if(l[i]==ans1)ans2+=nm[i];
printf("%d %.0lf\n",ans1,ans2);
return ;
}
随机推荐
- 项目中容易出现的BUG预警
之前没有记录BUG的习惯导致在同一个坑里边栽了好几次,于是将最近几个项目中遇到的问题整理一下,在进行新项目时预警一遍: 使用携带有搜索功能的分页查询时,注意当用户更改了查询条件但没有点击查询按钮直接点 ...
- 解析xml的方式
1.DOM 理论:将标记文档语言一次性加载进内存,在内存中形成DOM树. 优点:操作方便,可以对文档进行CRUD(增删改查)操作,适用于服务端操作 缺点:占内存,不适用与手机,智能家居等内存容量小的设 ...
- 达观数据CTO纪达麒:小标注数据量下自然语言处理实战经验
自然语言处理在文本信息抽取.自动审校.智能问答.情感分析等场景下都有非常多的实际应用需求,在人工智能领域里有极为广泛的应用场景.然而在实际工程应用中,最经常面临的挑战是我们往往很难有大量高质量的标注语 ...
- Math.abs( x )
Math.abs( x ) 下面是参数的详细信息: x : 一个数字 返回值: 返回一个数字的绝对值 <html> <head> <title>JavaScript ...
- 读取Flex AIR应用程序设置
说明: 本人之前做过一年的Flex AIR移动跨平台开发,在之前学习过程中,一直是将笔记记在了Evernote上,有的笔记是自己写的,也有的笔记是在网上看到,顺手记下了的. 所以在这里声明下,如果在网 ...
- java构造方法的私有化
有的时候我们为了避免外界创建某类的实例,就将某类的构造方法私有化,即将它的构造方法用private修饰: 外界如何用到? 提供get方法!不提供的话外界就没法创建对象!(对反射无效) Eg:packa ...
- SQL 常见出现错误(附件、保存表、脱机、自增序列号 )
一.问题如图所示: 当填了某些数据,按“保存”时出现这个问题怎么解决? 1.打开“工具”-“选项”-“Designers” , 2.选择如下去勾: 二.当附加数据库的时候出现如下错误: 在附件文件上选 ...
- Spring security用户URL权限之FilterSecurityInterceptor
总: 用户通过浏览器发送URL地址,由FilterSecurityInterceptor判断是否具有相应的访问权限. 对于用户请求的方法权限,例如注解@PreAuthorize("hasRo ...
- linux scull 中的缺陷
让我们快速看一段 scull 内存管理代码. 在写逻辑的深处, scull 必须决定它请求的内 存是否已经分配. 处理这个任务的代码是: if (!dptr->data[s_pos]) { dp ...
- 用nodejs创建服务器显示html页面
nodejs版本:v10.14.2 1.首先准备一个简单的html页面 <!DOCTYPE html> <html lang="en"> <head& ...