zoukankan      html  css  js  c++  java
  • 输出最长上升子序列 模型(DP)

      要输出最长上升子序列,只需加一个pre数组,记录新加如序列的前一个。最后遍历一遍数组就可以。

    代码如下:

    #include <iostream>
    #include
    <cstdio>
    #include
    <cstring>

    using namespace std;

    const int N = 1000;

    int num[N];
    int pre[N];
    int dp[N];
    int f[N];


    int main()
    {
    freopen(
    "data.in", "r", stdin);
    int n, i, j, ans, flag;
    while(~scanf("%d", &n))
    {
    for(i = 1; i <= n; i++)
    scanf(
    "%d", &num[i]);

    memset(dp,
    0, sizeof(dp));
    memset(pre,
    0, sizeof(pre));
    memset(f,
    0, sizeof(f));
    dp[
    1] = 1;
    for(i = 2; i <= n; i++)
    {
    ans
    = dp[i];
    for(j = 1; j < i; j++)
    {
    if(num[i] > num[j] && ans < dp[j])
    {
    ans
    = dp[j];
    if(!pre[num[i]] && !f[j])
    {
    pre[num[i]]
    = num[j]; //记录
    f[j] = 1;
    flag
    = num[i];
    }
    }
    }
    dp[i]
    = ans + 1;
    }
    ans
    = 0;
    i
    = flag;
    while(i)
    {
    printf(
    "%d ", i);
    i = pre[i];
    }
    for(i = 1; i <= n; i++)
    if(dp[i] > ans)
    ans
    = dp[i];
    printf(
    "\n%d\n", ans);
    }
    return 0;
    }

  • 相关阅读:
    汉语-词语-转世:百科
    汉语-词语-往生:百科
    中缀表达式值
    车厢调度(train.cpp)
    字符串匹配问题
    计算(calc.cpp)
    2、括弧匹配检验
    2058 括号序列
    7909:统计数字
    1007. 计算余数
  • 原文地址:https://www.cnblogs.com/vongang/p/2147667.html
Copyright © 2011-2022 走看看