zoukankan      html  css  js  c++  java
  • hdu 1423 最长上升递增子序列

     1 #include <iostream>
     2 #include <cstdio>
     3 #include <cstring>
     4 using namespace std;
     5 
     6 const int maxn=505;
     7 int a[maxn],b[maxn],dp[maxn];
     8 
     9 int main()
    10 {
    11     int t,n,m,i,j,k;
    12     scanf("%d",&t);
    13     while(t--)
    14     {
    15         scanf("%d",&n);
    16         for(i=1;i<=n;i++) scanf("%d",a+i);
    17         scanf("%d",&m);
    18         for(i=1;i<=m;i++) scanf("%d",b+i);
    19         memset(dp,0,sizeof(dp));
    20         for(i=1;i<=n;i++)
    21         {
    22             k=0;
    23             for(j=1;j<=m;j++)
    24             {
    25                 //当前要比较的数值为a[i],所以我们寻找b[j]中比a[i]小,但dp[j]最大的值,找到了就用k记录位置
    26                 if(a[i]>b[j] && dp[j]>dp[k])
    27                     k=j;
    28                 if(a[i]==b[j])//更新最大值
    29                     dp[j]=dp[k]+1;
    30             }
    31         }
    32         int ans=0;
    33         for(i=1;i<=m;i++)
    34             ans=max(ans,dp[i]);
    35         printf("%d
    ",ans);
    36         if(t) puts("");
    37     }
    38     return 0;
    39 }
  • 相关阅读:
    【Linux】【Chrome】安装Chrome浏览器的攻略
    ubuntu下安装程序的三种方法
    scala学习笔记
    安装scala
    安装java
    Python学习笔记
    Linux安装python
    软件测试笔记
    Linux安装微信
    PUTTY学习
  • 原文地址:https://www.cnblogs.com/xiong-/p/4104817.html
Copyright © 2011-2022 走看看