给你两个序列A和B,求出他们的最长公共上升子序列并输出方案

动态规划,我们假设f[i][j]表示A处理到第i位,B处理到第j位时的长度

那么显然,若A[i]=B[j],那么f[i][j]=max{f[i-1][k]}+1,否则f[i][j]=f[i-1][j]

我们再记一个g[i][j]表示f[i][j]是从哪里转移过来的,记上面那个k即可

到时候直接倒序递归按照g[i][j]输出,若g[i][j]=0那么就--i

#pragma GCC optimize("O3")
#pragma G++ optimize("O3")
#include<stdio.h>
#include<string.h>
#include<algorithm>
using namespace std;
int f[5010][5010],g[5010][5010],a[5010],b[5010],n,m;
void print(int i,int j){if(j){while(i&&!g[i][j]) i--;print(i-1,g[i][j]);printf("%d ",b[j]);}
}
int main(){freopen("okarin.in","r",stdin);freopen("okarin.out","w",stdout);scanf("%d",&n);for(int i=1;i<=n;++i) scanf("%d",a+i);scanf("%d",&m);for(int i=1;i<=m;++i) scanf("%d",b+i);for(int k,i=1;i<=n;++i){k=0;for(int j=1;j<=m;++j){f[i][j]=f[i-1][j];if(a[i]==b[j]){f[i][j]=f[i-1][k]+1;g[i][j]=k;}if(a[i]>b[j]&&f[i-1][k]<f[i-1][j]) k=j;}}int j=0;for(int i=m;i;--i)if(f[n][i]>f[n][j]) j=i;printf("%d\n",f[n][j]);print(n,j);
}

转载于:https://www.cnblogs.com/Extended-Ash/p/9477223.html

Jzoj5424 凤凰院凶真相关推荐

  1. JZOJ5424. 【NOIP2017提高A组集训10.25】凤凰院凶真

    题解 题目的意思是求两个序列的最长公共上升子序列. 就此可以联想到求两个序列的最长公共子序列: 设fi,jf_{i,j}表示a序列处理到i,b序列处理j的最长公共子序列, 转移很简单. 现在要满足公共 ...

  2. JZOJ 5424. 【NOIP2017提高A组集训10.25】凤凰院凶真

    Description Input Output Sample Input 5 1 4 2 5 1 4 1 1 2 4 Sample Output 2 1 4 Data Constraint Solu ...

  3. 5424. 【NOIP2017提高A组集训10.25】凤凰院凶真

    这是一道DP题,然后做的时候发现,DP式子死活推不出来. 题目大意(本人实在是不想复制了呵-- 给出A,B序列 找出他们的最长公共严格递增子序列 明确,这是一道DP 所以设状态fi,jf_{i,j}f ...

  4. NOIP5424. 【NOIP2017提高A组集训10.25】凤凰院凶真 LCIS 方案

    题意:求lcis以及其方案. 原题:千帆渡 n<=5000. 很明显的DP. 设f[i][j]表示做到a的第i位,结尾是b的第j位,这样子便于记录方案. 那么明显有 f[i][j]=max(f[ ...

  5. 计算机科学学院凤凰院徽,数学科学学院院徽、院训展示

    原标题:数学科学学院院徽.院训展示 电子科技大学 数学科学学院院徽.院训 2018年12月22日,数学科学学院于2019"数说新语 逐梦青春"迎新晚会暨2018年度表彰大会上,最终 ...

  6. 【SSLGZ 2812】2017年10月30日提高组T2 凤凰院真凶

    问题描述 输入 输出 第一行一个整数k,表示最长公共合法事件序列的长度. 样例输入 5 1 4 2 5 1 4 1 1 2 4 样例输出 2 数据范围 算法讨论 f[i][j]为a到第i个位置,b到第 ...

  7. [2017纪中10-25]凤凰院修真 LCIS最长公共上升子序列

    题面 f[i][j]表示a序列考虑到i,b序列考虑到j且b[j]必须选的最长长度. a[i]!=b[j]时,f[i][j]=f[i-1][j]. 那么当a[i]==b[j]时,f[i][j]=max{ ...

  8. 2013年北邮网研院上机真题(D)

     D  文件系统 Accept:9 Submit:79 Time Limit:1000MS Memory Limit:65536KB Description 现在很多操作系统的文件系统都是基于树形 ...

  9. unity | 写一个XML和用unity读取XML

    一.新建一个XML文档 打开VS→另存为→格式选择xml 二.了解xml的语法规则 1.开头固定 就是开头必须有这一行,当然,里面的版本和编码格式,如果你懂的话,也可以自己改其他的. <?xml ...

  10. csu-2018年11月月赛Round2-div1题解

    csu-2018年11月月赛Round2-div1题解 A(2191):Wells的积木游戏 Description Wells有一堆N个积木,标号1~N,每个标号只出现一次 由于Wells是手残党, ...

最新文章

  1. python3 统计文件夹下文件(含文件夹)的个数
  2. MySQL从主从到代理
  3. xcode开发php,xcode怎么编写c语言
  4. 对象与内存控制1---实例变量和类变量
  5. ros下的python代码的编写与回调函数
  6. MTK驱动(84)---GPS 配置
  7. 添加七牛云存储_3月1日七牛云存储割韭菜的应对方法
  8. bom csv java_Java系列化与反系列化
  9. java计算两个字符串格式的时间间隔多少天多少小时多少分钟
  10. js调用百度地图搜索功能
  11. python 文件处理软件_Python如何处理文件的?
  12. Solidworks 3D Onshape 3D 繪圖自學分享
  13. 计算机专业专硕考研数学考一还是二,计算机专业考研数学考一还是二
  14. matlab精度高保存图片
  15. forward函数——浅学深度学习框架中的forward
  16. 又看到一种新的日志转贴方法
  17. R 入门级 之 《R的基本原理与概念》 -- 200412
  18. oracle 查询秒,oracle 查询N秒之前的数据
  19. 登录提示:You are required to change your password immediately (password aged)
  20. 网上爬取股票数据实例

热门文章

  1. 医院信息化整体解决方案
  2. java判断日文_如何判断字符串中含有日文字符
  3. elixir 规格_六家使用Elixir的著名公司-以及为什么做出改变
  4. shell编程三大神器之awk
  5. 关于微信小程序的navigator标签
  6. Check Point R80.40 防火墙
  7. MYSQL存储过程的简单运用,包括传值、返回值、返回集合
  8. 制作HTML邮件邮箱注意问题和解决方案--兼容手机邮箱、电脑邮箱和邮件客户端
  9. python 类 对象 知乎_Python 基础入门(八)类与对象 学习小结
  10. 道格拉斯-普克抽稀算法 曲线平滑