博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
$Poj1952\ $洛谷$1687\ Buy\ Low,Buy\ Lower$ 线性$DP+$方案计数
阅读量:4308 次
发布时间:2019-06-06

本文共 1550 字,大约阅读时间需要 5 分钟。

 

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

1 #include
2 #include
3 #include
4 #define Rg register 5 #define il inline 6 #define db double 7 #define ll long long 8 #define mem(a,b) memset(a,b,sizeof(a)); 9 #define go(i,a,b) for(Rg int i=a;i<=b;++i)10 #define yes(i,a,b) for(Rg int i=a;i>=b;--i)11 using namespace std;12 il int read()13 {14 int x=0,y=1;char c=getchar();15 while(c<'0'||c>'9'){
if(c=='-')y=-1;c=getchar();}16 while(c>='0'&&c<='9'){x=(x<<3)+(x<<1)+c-'0';c=getchar();}17 return x*y;18 }19 const int N=5001;20 int n,ans1,p[N],l[N];//price length21 db ans2,nm[N];//number22 int main()23 {24 n=read();25 go(i,1,n)p[i]=read(),l[i]=1;26 go(i,1,n)27 {28 go(j,1,i-1)if(p[j]>p[i])l[i]=max(l[i],l[j]+1);29 if(l[i]==1)nm[i]=1;30 go(j,1,i-1)31 {32 if(p[i]==p[j]&&l[i]==l[j])nm[i]-=nm[j];33 if(p[j]>p[i]&&l[j]+1==l[i])nm[i]+=nm[j];34 }35 }36 go(i,1,n)if(l[i]>ans1)ans1=l[i];37 go(i,1,n)if(l[i]==ans1)ans2+=nm[i];38 printf("%d %.0lf\n",ans1,ans2);39 return 0;40 }
View Code

 

 

转载于:https://www.cnblogs.com/forward777/p/11010126.html

你可能感兴趣的文章
poj 1200 Hash处理字符串(简单的rabin-karp)
查看>>
【ASP.NET】System.Web.Routing - PageRouteHandler Class
查看>>
Myeclipse项目内容没有报错但是项目上面却有红色叉叉
查看>>
angular何时触发脏检查机制
查看>>
javascript类继承
查看>>
nutz框架使用记录之Cnd.wrap
查看>>
ruby的hash学习笔记例: 将字符串文本中的单词存放在map中
查看>>
WPF 实际应用的小技巧(一)
查看>>
lua学习笔记(一)
查看>>
hdu 1069 Monkey and Banana
查看>>
C语言----结构体---结构体与函数
查看>>
JavaScript DOM知识 (一)
查看>>
B-树和B+树的应用:数据搜索和数据库索引
查看>>
Chrome DevTools 的 Sources 调试
查看>>
关于web前端中文站(www.lisa33xiaoq.net)侵权业余草(www.xttblog.com)相关文章的公告...
查看>>
执行umount 的时候却提示:device is busy 的处理方法
查看>>
nginx 服务器重启命令,关闭
查看>>
linux命令sed学习笔记
查看>>
2016年的不正式总结
查看>>
图文介绍openLDAP在windows上的安装配置
查看>>