CSU1120-病毒-DP/LCS/LIS

来源:互联网 发布:针织短款开衫淘宝网 编辑:程序博客网 时间:2024/06/02 03:36

G: 病毒

Description

你有一个日志文件,里面记录着各种系统事件的详细信息。自然的,事件的时间戳按照严格递增顺序排列(不会有两个事件在完全相同的时刻发生)。

遗憾的是,你的系统被病毒感染了,日志文件中混入了病毒生成的随机伪事件(但真实事件的相对顺序保持不变)。备份的日志文件也被感染了,但由于病毒采用的随机感染方法,主日志文件和备份日志文件在感染后可能会变得不一样。

给出被感染的主日志和备份日志,求真实事件序列的最长可能长度。

Input

输入第一行为数据组数T (T<=100)。每组数据包含两行,分别描述感染后的主日志和备份日志。

每个日志文件的格式相同,均为一个整数n (1<=n<=1000)(代表感染后的事件总数)和n 个不超过100,000的正整数(表示感染后各事件的时间戳)。

注意,感染后可能会出现时间戳完全相同的事件。

Output

对于每组数据,输出真实事件序列的最长可能长度。

Sample Input

19 1 4 2 6 3 8 5 9 16 2 7 6 3 5 1

Sample Output

3

Hint

这个题太明显了
先找一次LCS然后找最长上升子序列?不不不那样的话程序写起来贼麻烦
你只需要在找LCS的时候保证上升就好

#include <bits/stdc++.h>#define N 1010#define INF 0x3f3f3f3f#define LL long long#define mem(a,n) memset(a,n,sizeof(a))#define fread freopen("in.txt","r",stdin)#define fwrite freopen("out.txt","w",stdout)using namespace std;//int mp[1010][1010],arr1[1010],arr2[1010],dp[1010];愚蠢的做法的痕迹╭(╯^╰)╮//pair<int,int> path[1010][1010];//int main()//{//  ios::sync_with_stdio(false);//  int t,n1,n2,x,y;//  vector<int> ans;//  cin>>t;//  path[1][1].first=0,path[1][1].second=0;//  while(t--){//      ans.clear();//      cin>>n1;//      for(int i=1;i<=n1;++i){//          cin>>arr1[i];//      }//      cin>>n2;//      for(int i=1;i<=n2;++i){//          cin>>arr2[i];//      }//      for(int i=0;i<=n1||i<=n2;++i){//          mp[i][0]=mp[0][i]=0;//      }//      for(int i=1;i<=n1;++i){//          for(int j=1;j<=n2;++j){//              if(arr1[i]==arr2[j]){//                  mp[i][j]=mp[i-1][j-1]+1;//                  path[i][j].first=i-1;//                  path[i][j].second=j-1;//              }else{//                  if(mp[i][j-1]>mp[i-1][j]){//                      mp[i][j]=mp[i][j-1];//                      path[i][j].first=i;//                      path[i][j].second=j-1;//                  }else{//                      mp[i][j]=mp[i-1][j];//                      path[i][j].first=i-1;//                      path[i][j].second=j;//                  }//              }//          }//      }//      int tempx,tempy;//      x=n1,y=n2;//      while(x!=0&&y!=0){//          tempx=path[x][y].first,tempy=path[x][y].second;//          if(mp[x][y]!=mp[tempx][tempy]){//              ans.push_back(arr1[x]);//          }//          x=tempx,y=tempy;//      }//      for(int i=0;i<ans.size();++i){//          cout<<ans[i]<<' ';//          dp[i]=1;//      }//      int m,ma=0;//      for(int i=1;i<ans.size();++i){//          m=0;//          for(int j=0;j<i;++j){//              if(ans[i]>ans[j]&&dp[j]>m){//                  m=dp[j];//              }//          }//          dp[i]=m+1;//          if(dp[i]>ma){//              ma=dp[i];//          }//      }//      for(int i=0;i<ans.size();++i){//          if(dp[i]>m){//              m=dp[i];//          }//          cout<<dp[i]<<' ';//      }//      cout<<m<<endl;//  }//  return 0;//}int arr1[N],arr2[N],dp[N];int main(){    ios::sync_with_stdio(false);    int n,m,t;    cin>>t;    while(t--){        cin>>n;        for(int i=1;i<=n;++i){            cin>>arr1[i];        }        cin>>m;        for(int i=1;i<=m;++i){            cin>>arr2[i];        }        mem(dp,0);        int MAX;        for(int i=1;i<=n;++i){            MAX=0;            for(int j=1;j<=m;++j){                if(arr1[i]>arr2[j]&&MAX<dp[j]){                    MAX=dp[j];                }                if(arr1[i]==arr2[j]){                    dp[j]=MAX+1;                }            }        }        MAX=0;        for(int i=1;i<=m;++i){            if(dp[i]>MAX){                MAX=dp[i];            }        }        cout<<MAX<<endl;    }    return 0;}/**********************************************************************    Problem: 1120    User: CSUzick    Language: C++    Result: AC    Time:228 ms    Memory:1700 kb**********************************************************************/
原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 4个月的孩子大便拉水怎么办 五个多月宝宝大便拉水怎么办 七个月宝宝大便还没成行怎么办 宝宝一岁了还没长牙怎么办 宝宝什么都会就差不会独占怎么办 两岁宝宝肚子不舒服还吐怎么办 两岁宝宝吃坏肚子吐怎么办 1岁半儿童牙烂了怎么办 一岁宝宝吃了就吐怎么办 两岁宝宝龋齿门牙掉了怎么办 一岁宝宝冻着了呕吐怎么办 两岁宝宝喉咙有痰呼呼响怎么办 1岁宝宝吐的水水怎么办 宝宝吐了5 6次了怎么办 7岁儿童吃了就吐怎么办 狗狗拉稀呕吐不吃饭只喝水怎么办 宝宝吃坏肚子上吐下泄怎么办 一岁宝宝又吐又拉怎么办 八个月宝宝吃什么吐什么怎么办 九个月宝宝吃什么吐什么怎么办 三岁宝宝吃什么吐什么怎么办 2岁宝宝又拉又吐怎么办 6岁儿子又吐又拉怎么办 2岁宝宝吃了就吐怎么办 宝宝吃饱了就吐吐了在吃怎么办 3岁宝宝吃了就吐怎么办 6岁儿童又吐又拉怎么办 还没满月的宝宝肚子胀气怎么办 婴儿拉屎有粘液像果冻状怎么办 宝宝不爱吃饭怎么办吃就吐出来 19天的宝宝生理性腹泻怎么办 33天的婴儿生理性腹泻怎么办 两个多月宝宝生理性腹泻怎么办 3岁儿童又吐又拉怎么办 宝宝两岁了突然说话有点口吃怎么办 姜文怎么克服口吃 说话结巴怎么办 慢性咽炎嗓子干哑说话费劲怎么办 感冒后嗓子不疼 说话费劲怎么办 小孩子在幼儿园内向老尿裤子怎么办 五岁宝宝总是抽鼻子有黄鼻涕怎么办 2岁宝宝头有大人的那么大怎么办