题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1423

好坑啊。。还有公共串为0时的特殊判断,还有格式错误。。看Discuss看知道除了最后一组测试数据之外都需要空行。。

其余的会LCS打印路径就行了。

法一:

///公共最长上升子序列
#include <iostream>
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <math.h>
#include <algorithm>
#define N 505
using namespace std; int dp[N][N],flag[N][N];
int dp1[N];
int a[N],b[N],c[N];
int n,m,k; void solve_c(int i,int j){
if(i==||j==) return;
if(flag[i][j]==){
solve_c(i-,j-);
c[++k] = a[i];
}else if(flag[i][j]==){
solve_c(i-,j);
}else solve_c(i,j-);
}
void LCS(){
memset(flag,,sizeof(flag));
for(int i=;i<=n;i++){
for(int j=;j<=m;j++){
if(a[i]==b[j]){
dp[i][j] = dp[i-][j-]+;
flag[i][j]=;
}else{
if(dp[i-][j]>dp[i][j-]) flag[i][j]=;
else flag[i][j]=-;
dp[i][j] = max(dp[i-][j],dp[i][j-]);
}
}
}
//printf("%d",dp[n][m]);
k = ;
solve_c(n,m);
//for(int i=1;i<=k;i++) printf("%d ",c[i]);
}
void LIS(){
dp1[] = ;
int mx = ;
for(int i=;i<=k;i++){
dp1[i]=;
for(int j=;j<i;j++){
if(c[i]>c[j]&&dp1[i]<dp1[j]+){
dp1[i] = dp1[j]+;
}
if(mx<dp1[i]) mx=dp1[i];
}
}
if(k==) mx = ;
printf("%d\n",mx);
}
int main()
{
int tcase;
scanf("%d",&tcase);
while(tcase--){
scanf("%d",&n);
for(int i=;i<=n;i++){
scanf("%d",&a[i]);
}
scanf("%d",&m);
for(int i=;i<=m;i++){
scanf("%d",&b[i]);
}
memset(dp,,sizeof(dp));
LCS();
LIS();
if(tcase) printf("\n");
}
return ;
}

大神模板:

#include<iostream>
#include<cstdio>
#include<cstring>
using namespace std; const int maxn = ;
int a[maxn],b[maxn],dp[maxn];
int n,m;
int LICS()
{
int i,j,MAX;
memset(dp,,sizeof(dp));
for(i = ; i<=n; i++)
{
MAX = ;
for(j = ; j<=m; j++)
{
if(a[i]>b[j] && MAX<dp[j])
MAX = dp[j];
if(a[i]==b[j])
dp[j] = MAX+;
}
}
MAX = ;
for(i = ; i<=m; i++)
if(MAX<dp[i])
MAX = dp[i];
return MAX;
}
int main()
{
int tcase;
scanf("%d",&tcase);
while(tcase--){
scanf("%d",&n);
for(int i=;i<=n;i++){
scanf("%d",&a[i]);
}
scanf("%d",&m);
for(int i=;i<=m;i++){
scanf("%d",&b[i]);
}
int MAX = LICS();
printf("%d\n",MAX);
if(tcase) printf("\n");
}
return ;
}

最新文章

  1. PHP去重算法的优化过程
  2. Specific sleep staging features in EEG
  3. Simplify Path
  4. JS-reverse(数组内容颠倒)
  5. oracle去重等基础问题
  6. apche的主配置文件)
  7. Ubuntu14.04通过pyenv配置多python
  8. banner淡出效果
  9. python之文件
  10. Hadoop框架下MapReduce中的map个数如何控制
  11. 4 - 执行TestNG
  12. [转载]VMWare网络连接透析
  13. 浅谈DevExpress&lt;四&gt;:TreeList中的拖拽功能
  14. 利用Selenium和Browsermob批量嗅探下载Bilibili网站视频
  15. android v4兼容包
  16. 虚拟机Vmware成功安装Ubuntu Server 16.04中文版
  17. iframe 高度自适应
  18. mathJax基础语法-0基础开始,(这是网上抄来的如果有权限和版权问题联系本人处理,仅供学术参考)
  19. Loadrunner进行HTTPS协议性能测试
  20. Node.js读取文件内容并返回值(非异步)

热门文章

  1. hdu2421(数学,因式分解素数筛)
  2. [剑指Offer] 37.数字在排序数组中出现的次数
  3. 【C++ 拾遗】Function-like Macros
  4. [洛谷P3693]琪露诺的冰雪小屋
  5. BZOJ3533 [Sdoi2014]向量集 【线段树 + 凸包 + 三分】
  6. 【HDU 4300 Clairewd’s message】
  7. codeforces 1060 B
  8. Windows2008 – Task Scheduler – ‘Action “C:\Windows\SYSTEM32\cmd.exe” with return code 1’
  9. React 入门小结
  10. JavaBean定义、JSP中使用以及内省操作