zoukankan      html  css  js  c++  java
  • BJFU 1397 致我们终将逝去的爱情

     

    LIS

    由于要记录轨迹,所以不能用O(nlogn)优化,直接dp加father记录每个节点的转移。

     1 #include<cstdio>
     2 #include<algorithm>
     3 using namespace std;
     4 const int Nmax=2005;
     5 int n;
     6 int num[Nmax];
     7 int dp[Nmax];
     8 int ans[Nmax];
     9 int father[Nmax];
    10 int last;
    11 int main()
    12 {
    13     //freopen("bjfu.in","r",stdin);
    14     while(scanf("%d",&n)==1)
    15     {
    16         for(int i=1;i<=n;i++)
    17             scanf("%d",&num[i]);
    18         for(int i=0;i<=n;i++)
    19             dp[i]=0;
    20         for(int i=0;i<=n;i++)
    21         {
    22             ans[i]=0;
    23             father[i]=0;
    24         }
    25         int ans_max=0;
    26         for(int i=1;i<=n;i++)
    27         {
    28             dp[i]=1;
    29             for(int j=1;j<i;j++)
    30             {
    31                 if(num[j]<num[i] && dp[i]<dp[j]+1)
    32                 {
    33                     dp[i]=dp[j]+1;
    34                     father[i]=j;
    35                 }
    36             }
    37             if(ans_max<dp[i])
    38             {
    39                 ans_max=dp[i];
    40                 last=i;
    41             }
    42         }
    43         printf("%d
    ",ans_max);
    44         for(int i=1;i<=ans_max;i++)
    45         {
    46             ans[i]=last;
    47             last=father[last];
    48         }
    49         for(int i=ans_max;i>=1;i--)
    50         {
    51             printf("(%d,%d) ",ans[i],num[ans[i]]);
    52         }
    53         printf("
    ");
    54     }
    55     return 0;
    56 }
  • 相关阅读:
    hdu 4947
    hdu 4946
    hdu 4944
    hdu 4942
    hdu 4941
    PAT 【L2-011 玩转二叉树】
    PAT【L2-006 树的遍历】
    XYNUOJ 【2070: 重建二叉树】
    XYNUOJ 【1367: 二叉链表存储的二叉树】
    XYNUOJ 2390【二叉树遍历2】
  • 原文地址:https://www.cnblogs.com/BBBob/p/5931603.html
Copyright © 2011-2022 走看看