$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 ;
}
随机推荐
- Android 使用Toolbar+DrawerLayout快速实现仿“知乎APP”侧滑导航效果
在以前,做策划导航的时候,最常用的组件便是SlidingMenu了,当初第一次用它的时候觉得那个惊艳啊,体验可以说是非常棒. 后来,Android自己推出了一个可以实现策划导航的组件DrawerLay ...
- 洛谷P2947 [USACO09MAR]向右看齐Look Up
#include<cstdio> #include<algorithm> #include<stack> #include<cctype> using ...
- mysql数据库之多表查询
准备 ...
- 在web.xml中配置SpringMVC
代码如下 <servlet> <servlet-name>springMVC</servlet-name> <servlet-class>org.spr ...
- Java安装完毕后的环境配置
右键计算机=>属性=>高级系统设置=>环境变量=>系统变量=>新建系统变量 变量名:JAVA_HOME变量值:E:\Program Files\Java\jdk-9.0. ...
- H3C 以太网流量控制
- HOSt ip is not allowed to connect to this MySql server, MYSQL添加远程用户或允许远程访问三种方法
HOSt ip is not allowed to connect to this MySql server 报错:1130-host ... is not allowed to connect to ...
- H3C ACL包过滤配置任务
- webpack学习(一)项目中安装webpack
如何在项目中安装webpack,webpack-cli? 前提:电脑安装了 node和npm包管理工具 1 创建项目文件夹或者在已有的项目中打开终端 输入相关命令: npm init 因为已经安装好 ...
- P1094 百钱白鸡
题目描述 公鸡5文钱一只,母鸡3文钱一只,小鸡3只一文钱,用100文钱买100只鸡,其中公鸡,母鸡,小鸡都必须要有,问公鸡,母鸡,小鸡要买多少只刚好凑足100文钱. 输入格式 无. 输出格式 输出所有 ...