CodeForces 10D. LCIS 最长公共上升子序列模板题 + 打印路径

CodeForces 10D. LCIS 最长公共上升子序列模板题 + 打印路径

大家好,又见面了,我是全栈君。

推荐一篇炒鸡赞的blog。

以下代码中有打印路径。

#include <algorithm>
#include <iostream>
#include <cstring>
#include <cstdlib>
#include <cstdio>
#include <queue>
#include <cmath>
#include <stack>
#include <map>
#include <ctime>
#include <iomanip>

#pragma comment(linker, "/STACK:1024000000");
#define EPS (1e-6)
#define LL long long
#define ULL unsigned long long
#define _LL __int64
#define INF 0x3f3f3f3f
#define Mod 1000000007

using namespace std;

int A[510],B[510];

int py[510][510],px[510][510],dp[510][510] = {0};

void Output(int x,int y)
{
    if(x == -1 && y == -1)
        return ;

    Output(px[x][y],py[x][y]);

    if(A[x] == B[y])
        printf("%d ",A[x]);
}

int main()
{
    int n,m,i,j,mlen,x,y;

    scanf("%d",&n);
    for(i = 1;i <= n; ++i)
        scanf("%d",&A[i]);

    scanf("%d",&m);
    for(i = 1;i <= m; ++i)
        scanf("%d",&B[i]);

    int Max = 0,ax,ay;

    for(i = 1;i <= n; ++i)
    {
        mlen = 0,x = -1,y = -1;
        for(j = 1;j <= m; ++j)
        {
            dp[i][j] = dp[i-1][j];
            px[i][j] = i-1,py[i][j] = j;
            if(B[j] < A[i] && dp[i-1][j] > mlen)
                mlen = dp[i-1][j],x = i-1,y = j;

            if(B[j] == A[i])
                dp[i][j] = mlen + 1,px[i][j] = x,py[i][j] = y;
            if(dp[i][j] > Max)
                Max = dp[i][j],ax = i,ay = j;
        }
    }

    if(Max)
        printf("%d\n",Max),Output(ax,ay);
    else
        printf("0\n");
    return 0;
}

















版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

发布者:全栈程序员-用户IM,转载请注明出处:https://javaforall.cn/115817.html原文链接:https://javaforall.cn

【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛

【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...

(0)


相关推荐

  • PYCHARAM3.7激活码破解方法

    PYCHARAM3.7激活码破解方法,https://javaforall.cn/100143.html。详细ieda激活码不妨到全栈程序员必看教程网一起来了解一下吧!

  • 对中仪使用方法图解_罗马对意甲前四

    对中仪使用方法图解_罗马对意甲前四DATEADD函数计算一个日期通过给时间间隔加减来获得一个新的日期,DATEDIFF函数计算两个日期之间的小时、天、周、月、年等时间间隔总数。1、SQLServerDATEADD()函数定义和用法DATEADD()函数在日期中添加或减去指定的时间间隔。语法DATEADD(datepart,number,date)date 参数是合法的日期表达式。number 是您希望添加的间隔数;对于未来…

  • 光棍节程序员闯关秀第9关(总共10关) 解题步骤

    光棍节程序员闯关秀第9关(总共10关) 解题步骤题目链接:http://segmentfault.com/game/?k=4999c12ce5be7c3cba227ba9f4f7d797解题步骤:1.应景嘛,把所有的空格替换成11112.8位二进制转换成一个byte,解释为ASCII字符3.得到一个BASE64加密在字符串4.用 BASE64Decoder解密5.另存为

  • Python 深入浅出 – PyPDF2 处理 PDF 文件

    Python 深入浅出 – PyPDF2 处理 PDF 文件实际应用中,可能会涉及处理pdf文件,PyPDF2就是这样一个库,使用它可以轻松的处理pdf文件,它提供了读,割,合并,文件转换等多种操作。文档地址:http://pythonhosted.org/PyPDF2/PyPDF2安装PyCharm安装:File->DefaultSettings->ProjectInterpreterPdfFileR

  • DialogBOX-函数功能[通俗易懂]

    DialogBOX-函数功能[通俗易懂]该宏根据对话框模板资源创建一个模态的对话框。DialogBOX函数直到指定的回调函数通过调用EndDialog函数中止模态的对话框才能返回控制。该宏使用DialogBoxParam函数。函数原型:intDialogBox(HINSTANCEhlnstance,LPCTSTRIpTemplate,HWNDhWndParent,DLGPROCIpDialogFunc);   参数:hlnst

  • 几道web前端练习题目

    在HTML语言中,以下哪个属性不是通用属性?A]<class>B]<title>C]<href>D]<style>在线练习:http://hove

    2021年12月28日

发表回复

您的电子邮箱地址不会被公开。

关注全栈程序员社区公众号