博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
hdu 1423(LCS+LIS)
阅读量:5172 次
发布时间:2019-06-13

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

 

题目链接:

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

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

法一:

///公共最长上升子序列#include 
#include
#include
#include
#include
#include
#define N 505using 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==0||j==0) return; if(flag[i][j]==0){ solve_c(i-1,j-1); c[++k] = a[i]; }else if(flag[i][j]==1){ solve_c(i-1,j); }else solve_c(i,j-1);}void LCS(){ memset(flag,0,sizeof(flag)); for(int i=1;i<=n;i++){ for(int j=1;j<=m;j++){ if(a[i]==b[j]){ dp[i][j] = dp[i-1][j-1]+1; flag[i][j]=0; }else{ if(dp[i-1][j]>dp[i][j-1]) flag[i][j]=1; else flag[i][j]=-1; dp[i][j] = max(dp[i-1][j],dp[i][j-1]); } } } //printf("%d",dp[n][m]); k = 0; solve_c(n,m); //for(int i=1;i<=k;i++) printf("%d ",c[i]);}void LIS(){ dp1[1] = 1; int mx = 1; for(int i=2;i<=k;i++){ dp1[i]=1; for(int j=1;j
c[j]&&dp1[i]

 

大神模板:

#include
#include
#include
using namespace std;const int maxn = 605;int a[maxn],b[maxn],dp[maxn];int n,m;int LICS(){ int i,j,MAX; memset(dp,0,sizeof(dp)); for(i = 1; i<=n; i++) { MAX = 0; for(j = 1; j<=m; j++) { if(a[i]>b[j] && MAX

 

转载于:https://www.cnblogs.com/liyinggang/p/5414884.html

你可能感兴趣的文章
用virtualenv建立独立虚拟环境 批量导入模块信息
查看>>
Sublime Text3 插件:convertToUTF8
查看>>
BZOJ4060 : [Cerc2012]Word equations
查看>>
hdu2089不要62(数位dp)
查看>>
JAVA输出最大值和最小值
查看>>
64位weblogic11g安装
查看>>
oracle、mysql、sql server等;流行数据库的链接驱动配置
查看>>
UvaLive 6664 Clock Hands
查看>>
PCB 周期计算采用 SQL 函数调用.net Dll 标量函数 实现
查看>>
Problem B: 取石子
查看>>
Python学习笔记001——Linux
查看>>
Vue: 常用指令
查看>>
简单介绍.Net3.0 中跨线程访问控件
查看>>
oracle imp 工具可能出现的问题
查看>>
bzoj1045题解
查看>>
学习Cocos2d的博客 --推荐
查看>>
SpringMVC中@RequestMapping参数设置
查看>>
lea实现加法
查看>>
文件操作
查看>>
spring容器启动的加载过程(三)
查看>>