关于lis的方案数
求lis的时候呢,我想n^2的做法是很简单的,二分的话除了最长不上升或最长不下降子序列不好求之外(毕竟要注意细节)于是从中发现了,求lis真正的序列也是十分不好求出的尤其是字典序最大的不上升序列了,什么的很难求的,当时好像打了hash,玄学找起点,优先队列维护。等等,可能不是很好的思路吧。
但是求方案数就不一样了并不需要一些堆什么的维护。多开一个数组在dp的时候进行维护即可我是这样想的并不是所有的方案数都是乘法原理,加法原理是乘法原理的分支,不能光想着乘法。
下面给出例题求不同的lis方案数。
这道题呢第一问很简单的,求一个最长下降子序列即可而且还不算相同的数字,数据范围5000 n^2当然也是可以过得。所以关键是第二问。
问的是不相同的最长下降子序列有多少种,这个问题让我感觉难以回答,尽管看完题解后恍然大悟,但是刚碰到的时候还是免不了想起了暴力,乘法原理什么的。
这里题解上给出的正解是维护一个t数组表示以第i个数子为结尾的最长下降子序列的方案数,尽管它可能不是答案但是对答案的累加做出了极大的贡献所以需要维护一下。
那么则有另一个状态转移方程了。f[i]==f[j]&&a[i]==a[j]?t[j]=0:0; f[i]==f[j]+1&&a[i]<a[j]?t[i]+=t[j]:0;其中1=<j<i;
这样就维护好了t数组,所以接下来就完事了,仔细思考上述第一个状态转移。如果当前的数字相等和长度都相等的话那么,就一定是完全相同的序列那么前一个对答案就做不出任何贡献了,因为答案要的是不相同的方案数。
code:
#include<bits/stdc++.h>
#include<iomanip>
#include<iostream>
#include<cstdio>
#include<cmath>
#include<ctime>
#include<cstdlib>
#include<cstring>
#include<string>
#include<set>
#include<bitset>
#include<queue>
#include<deque>
#include<stack>
#include<cctype>
#include<utility>
#include<algorithm>
#include<map>
#include<vector>
using namespace std;
inline long long read()
{
long long x=,f=;char ch=getchar();
while(ch<''||ch>''){if(ch=='-')f=-;ch=getchar();}
while(ch>=''&&ch<=''){x=x*+ch-'';ch=getchar();}
return x*f;
}
inline void put(long long x)
{
x<?x=-x,putchar('-'):;
long long num=;char ch[];
while(x)ch[++num]=x%+'',x/=;
num==?putchar(''):;
while(num)putchar(ch[num--]);
putchar(' ');return;
}
const int MAXN=;
int n;
int a[MAXN],f[MAXN];
int ans=,cnt=;
int c[MAXN];
int main()
{
//freopen("1.in","r",stdin);
n=read();
for(int i=;i<=n;i++)a[i]=read();
for(int i=;i<=n;i++)
{
f[i]++;
for(int j=;j<i;j++)if(a[j]>a[i])f[i]=max(f[i],f[j]+);
ans=max(ans,f[i]);
for(int j=;j<i;j++)
{
if(a[i]==a[j]&&f[j]==f[i])c[j]=;
if(a[i]<a[j]&&f[j]+==f[i])c[i]+=c[j];
}
c[i]==?c[i]=:;
}
put(ans);
for(int i=;i<=n;i++)if(f[i]==ans)cnt+=c[i];
put(cnt);
return ;
}
显然算法的复杂度是n^2的所以,为了追求更完美,好吧我也不是完美主义者,不是很想写了。那就这样吧。
关于lis的方案数的更多相关文章
- 洛谷P1108 低价购买[DP | LIS方案数]
题目描述 “低价购买”这条建议是在奶牛股票市场取得成功的一半规则.要想被认为是伟大的投资者,你必须遵循以下的问题建议:“低价购买:再低价购买”.每次你购买一支股票,你必须用低于你上次购买它的价格购买它 ...
- 洛谷 P1108 低价购买(LIS,统计方案数)
传送门 解题思路 看第一个要求,很显然是求最长下降子序列,和LIS几乎一样,很简单,再看第二个问号,求最长下降子序列的方案数??这怎么求? 注意:当二种方案“看起来一样”时(就是说它们构成的价格队列一 ...
- Codeforces 461B. Appleman and Tree[树形DP 方案数]
B. Appleman and Tree time limit per test 2 seconds memory limit per test 256 megabytes input standar ...
- NOIP2012pj摆花[DP 多重背包方案数]
题目描述 小明的花店新开张,为了吸引顾客,他想在花店的门口摆上一排花,共m盆.通过调查顾客的喜好,小明列出了顾客最喜欢的n种花,从1到n标号.为了在门口展出更多种花,规定第i种花不能超过ai盆,摆花时 ...
- UVa 11137 (完全背包方案数) Ingenuous Cubrency
题意:用13.23……k3这些数加起来组成n,输出总方案数 d(i, j)表示前i个数构成j的方案数则有 d(i, j) = d(i-1, j) + d(i, j - i3) 可以像01背包那样用滚动 ...
- 删数方案数(regex)
[题目描述] 给出一个正整数序列 a,长度为 n,cyb 不喜欢完美,他要删掉一些数(也可以不删,即删掉0个),但是他不会乱删,他希望删去以后,能将 a 分成 2 个集合,使得两个非空集合的数的和相同 ...
- poj2975 Nim 胜利的方案数
Nim Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 5545 Accepted: 2597 Description N ...
- ☆ [HDU2157] How many ways?? 「矩阵乘法求路径方案数」
传送门:>Here< 题意:给出一张有向图,问从点A到点B恰好经过k个点(包括终点)的路径方案数 解题思路 一道矩阵乘法的好题!妙哉~ 话说把矩阵乘法放在图上好神奇,那么跟矩阵唯一有关的就 ...
- P2347 砝码称重-DP方案数-bitset
P2347 砝码称重 DP做法 : 转化为 01背包. 进行方案数 更新.最后统计种类. #include<bits/stdc++.h> using namespace std; #def ...
随机推荐
- ceph 的 bufferlist
bufferlist是buffer::list的别名,其由来在 http://bean-li.github.io/bufferlist-in-ceph/ 中有非常详细的介绍 其p.p_off.off字 ...
- 《软件测试自动化之道》读书笔记 之 基于Windows的UI测试
<软件测试自动化之道>读书笔记 之 基于Windows的UI测试 2014-09-25 测试自动化程序的任务待测程序测试程序 启动待测程序 获得待测程序主窗体的句柄 获得有名字控件的 ...
- ios UIButton设置高亮状态下的背景色
一,通过按钮的事件来设置背景色 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 - (void)viewDidLoad { [ ...
- 教你一招:修复win7 系统自带的截图工具损坏
这个问题经常见,原因是注册表没有导入. 修复很简单. 打开资源管理器,在C盘中搜索到 tpcps.dll ,在其中选一个右击,选择注册dll,然后截图工具就被修复了. 有时候便签也会出现类似问题,方法 ...
- js调用winform程序(带参数)
我们会发现,我们点击迅雷下载的时候 网页可以调用应用程序,而且连接会传入迅雷,这个是怎么做到的呢? 原理: 先注册表中添加软件的具体信息,然后通过 href 可以直接调用 1.写入注册表信息,注册, ...
- Jacky扯淡系列 – 验证码
1 验证码的用途 防止恶意用户的csrf,比如一些bot的重复请求,类似的有密码破解等操作. 但是验证码这个东西会降低用户的体验度,因此不能将其作为必备的防护措施. 2 常见的验证码形式 通常的验证码 ...
- Mysql EF 触发器生成主键id 存储区更新、插入或删除语句影响到了意外的行数(0)。实体在加载后可能被修改或删除。刷新 ObjectStateManager 项 ;System.Data.Entity.Infrastructure.DbUpdateConcurrencyException
http://stackoverflow.com/questions/24725261/how-to-use-a-custom-identity-column-in-sql-with-entity-f ...
- 仿迅雷播放器教程 -- 基于ffmpeg的C++播放器 (1)
2011年12月份的时候发了这篇博客 http://blog.csdn.net/qq316293804/article/details/7107049 ,博文最后说会开源一个播放器,没想到快两年了,才 ...
- android评分条RatingBar自定义设置
RatingBar为评分条控件,默认效果为若干个绿色的星星,如果想将其换成其他自定义图片就要自定义它的style.首先是布局文件: 其中android:numStars="5"设置 ...
- [Hinton] Neural Networks for Machine Learning - Hopfield Nets and Boltzmann Machine
Lecture 11 — Hopfield Nets Lecture 12 — Boltzmann machine learning Ref: 能量模型(EBM).限制波尔兹曼机(RBM) 高大上的模 ...