http://acm.hdu.edu.cn/showproblem.php?pid=1423

在前一道题的基础上多了一次筛选

要选出一个最长的递增数列

lower_bound()函数很好用,二分搜索找出满足ai>k的ai最小指针

还有upper_bound()

头文件#include<algorithm>

比如求长度为n的数组a中k的个数:upper_bound(a,a+n,k)-lower_bound(a,a+n,k)

int 放在main函数里面声明会出现程序崩溃,放在全局就没有问题,这里不知原因

#include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
using namespace std;
const int INF = 0x3f3f3f3f;
int i,j,n,m,h,a,b;
int s[],t[],lable[][],dp[][];
int ai[],dpp[];
void mem()
{
memset(s,,sizeof(s));
memset(t,,sizeof(s)); memset(ai,,sizeof(s));
memset(dpp,,sizeof(s));
for(i=;i<;i++)
{
memset(dp[i],,sizeof(s));
memset(lable[i],,sizeof(s));
}
}
int main()
{
int NN;
scanf("%d",&NN);
while(NN--)
{
mem();
scanf("%d",&n);
for(i=;i<n;i++)
{
scanf("%d",&s[i]);
}
scanf("%d",&m);
for(i=;i<m;i++)
{
scanf("%d",&t[i]);
}
for(i=;i<n;i++)
{
for(j=;j<m;j++)
{
if(s[i]==t[j])
{
dp[i+][j+]=dp[i][j]+;
lable[i+][j+]=;
}
else
{
if(dp[i][j+]>dp[i+][j])
{
dp[i+][j+]=dp[i][j+];
lable[i+][j+]=;
}
else
{
dp[i+][j+]=dp[i+][j];
lable[i+][j+]=;
}
}
}
}
a=n;b=m;
h=dp[n][m];
while(lable[a][b]!=)
{
if(lable[a][b]==)
{
a--;b--;h--;
ai[h]=s[a];//or t[b]
}
else if(lable[a][b]==)
{
a--;
}
else if(lable[a][b]==)
{
b--;
}
}
fill(dpp,dpp+n,INF);
h=dp[n][m];
for(i=;i<h;i++)
{
*lower_bound(dpp,dpp+h,ai[i])=ai[i];
}
cout<<lower_bound(dpp,dpp+n,INF)-dpp<<endl;
if(NN) cout<<endl;
}
return ;
}

HDU 1423 最长公共字串+上升子序列的更多相关文章

  1. URAL 1517 Freedom of Choice(后缀数组,最长公共字串)

    题目 输出最长公共字串 #define maxn 200010 int wa[maxn],wb[maxn],wv[maxn],ws[maxn]; int cmp(int *r,int a,int b, ...

  2. (字符串)最长公共字串(Longest-Common-SubString,LCS)

    题目: 给定两个字符串X,Y,求二者最长的公共子串,例如X=[aaaba],Y=[abaa].二者的最长公共子串为[aba],长度为3. 子序列是不要求连续的,字串必须是连续的. 思路与代码: 1.简 ...

  3. 最长公共子序列与最长公共字串 (dp)转载http://blog.csdn.net/u012102306/article/details/53184446

    1. 问题描述 子串应该比较好理解,至于什么是子序列,这里给出一个例子:有两个母串 cnblogs belong 比如序列bo, bg, lg在母串cnblogs与belong中都出现过并且出现顺序与 ...

  4. poj 3080 kmp求解多个字符串的最长公共字串,(数据小,有点小暴力 16ms)

    Blue Jeans Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 14113   Accepted: 6260 Descr ...

  5. hdu 1423 最长公共递增子序列 LCIS

    最长公共上升子序列(LCIS)的O(n^2)算法 预备知识:动态规划的基本思想,LCS,LIS. 问题:字符串a,字符串b,求a和b的LCIS(最长公共上升子序列). 首先我们可以看到,这个问题具有相 ...

  6. java_基础知识_字符串练习题_计算两个字符串的最长公共字串长度

    package tek; Java算法——求出两个字符串的最长公共字符串 /** * @Title: 问题:有两个字符串str1和str2,求出两个字符串中最长公共字符串. * @author 匹夫( ...

  7. 最长公共字串(LCS)最长连续公共字串(LCCS)

    链接1:http://blog.csdn.net/x_xiaoge/article/details/7376220 链接2:http://blog.csdn.net/x_xiaoge/article/ ...

  8. POJ 2774 (后缀数组 最长公共字串) Long Long Message

    用一个特殊字符将两个字符串连接起来,然后找最大的height,而且要求这两个相邻的后缀的第一个字符不能在同一个字符串中. #include <cstdio> #include <cs ...

  9. hdu 1423 最长公共递增子序列

    这题一开始把我给坑了,我还没知道LCIS的算法,然后就慢慢搞吧,幸运的是还真写出来了,只不过麻烦了一点. 我是将该题转换为多条线段相交,然后找出最多多少条不相交,并且其数值死递增的. 代码如下: #i ...

随机推荐

  1. my.conf 配置编码为utf-8

    MySQL基础配置之mysql的默认字符编码的设置(my.ini设置字符编码) MySQL的默认编码是Latin1,不支持中文,那么如何修改MySQL的默认编码呢,下面以设置UTF-8为例来说明. M ...

  2. Game Programming Pattern

    http://gameprogrammingpatterns.com/contents.html

  3. ecshop 团购-》调取评论

    涉及到的文件及代码:lib_insert.php,comments.lbi,{insert name='comments' type=$type id=$id} html代码: <blockqu ...

  4. SimPholders Xcode快速访问沙盒

    SimPholders

  5. aufomaper Queryable Extensions ProjectTo

    When using an ORM such as NHibernate or Entity Framework with AutoMapper's standard Mapper.Map funct ...

  6. Java操作Oracle

    public class DBCon { // 数据库驱动对象 public static final String DRIVER = "oracle.jdbc.driver.OracleD ...

  7. 深入理解JS的delete

    原文链接: Understanding delete原文作者: Kangax原文日期: 2010年01月10日 翻译日期: 2014年02月07日 翻译人员: 铁锚 !!!!!!!!草稿版本的翻译完成 ...

  8. centos yum 安装

    LINUX下YUM源配置 1.确保RHEL5中已经安装了yum [root@lvs-master ~]# rpm -qa |grep yumyum-metadata-parser-1.1.2-3.el ...

  9. linux下google chrome浏览器字体修改

    今天安装了最新的chrome,我是下载的.deb包直接安装的. 安装完后,用chrome浏览页面时,发现字体有的大,有的小,还不清楚. 于是在网上搜索了一下如何设置字体. 1.打开Chrome浏览器. ...

  10. vim 打开Linux下文件每一行后面都有^M的样式

    由于服务器不是我一个人在操作,在修改apache配置文件时发现了一个很奇怪的问题,vim编辑打开配置文件发现后面都有一个^M的标记 虽然不会影响服务的运行,但总感觉不对劲,所以在此我尝试用替换的方式来 ...