题目链接:http://codeforces.com/problemset/problem/463/D

题目大意:
给你k个序列(2=<k<=5),每个序列的长度为n(1<=n<=1000),每个序列中的数字分别为1~n,求着k个序列的最长公共子序列是多长?
解题思路:
由于每个序列的数字分别为1~n即各不相同,所以可以用pos[i][j]记录第i个序列中j的位置。
设dp[i]表示以i结尾的最长公共子序列长度,那么我们可以按顺序遍历第一个序列的位置i,
再在第一个序列中枚举位置j(j<i),然后遍历其他序列,如果对于每个序列k都满足pos[k][a[1][i]]>pos[k][a[1][j]],
那么说明a[1][i]可以接在a[1][j]后面,dp[a[1][i]]=max(dp[a[1][i],dp[a[1][j]]+1)。
这里说明一下:按顺序遍历是为了保证dp[a[1][j]]是已经求好了的,如果直接按值来遍历则会出现前面的dp值未求好的情况。

代码:

 1 #include<cstdio>
 2 #include<iostream>
 3 #include<algorithm>
 4 #include<vector>
 5 #include<string>
 6 #include<string.h>
 7 #include<cctype>
 8 #include<math.h>
 9 #include<stdlib.h>
10 #include<stack>
11 #include<queue>
12 #include<set>
13 #include<map>
14 #define lc(a) (a<<1)
15 #define rc(a) (a<<1|1)
16 #define MID(a,b) ((a+b)>>1)
17 #define fin(name)  freopen(name,"r",stdin)
18 #define fout(name) freopen(name,"w",stdout)
19 #define clr(arr,val) memset(arr,val,sizeof(arr))
20 #define _for(i,start,end) for(int i=start;i<=end;i++)
21 #define FAST_IO ios::sync_with_stdio(false);cin.tie(0);
22 using namespace std;
23 typedef long long LL;
24 const int N=2e3+5;
25 const LL INF64=1e18;
26 const int INF=0x3f3f3f3f;
27 const double eps=1e-10;
28
29 int dp[N],a[10][N],pos[10][N];//dp[i]表示以i结尾的最长公共子序列长度
30
31 int main(){
32     FAST_IO;
33     int n,q;
34     cin>>n>>q;
35     for(int i=1;i<=q;i++){
36         for(int j=1;j<=n;j++){
37             cin>>a[i][j];
38             pos[i][a[i][j]]=j;
39         }
40     }
41
42     for(int i=1;i<=n;i++){
43         dp[a[1][i]]=1;
44         for(int j=1;j<i;j++){
45             int t1=a[1][i],t2=a[1][j];
46             bool flag=true;
47             for(int k=2;k<=q;k++){
48                 if(pos[k][t1]<=pos[k][t2]){
49                     flag=false;
50                     break;
51                 }
52             }
53             if(flag)
54                 dp[t1]=max(dp[t1],dp[t2]+1);
55         }
56     }
57
58     int ans=1;
59     for(int i=1;i<=n;i++){
60         ans=max(ans,dp[i]);
61     }
62     cout<<ans<<endl;
63     return 0;
64 }

转载于:https://www.cnblogs.com/fu3638/p/9131480.html

Codeforces 463D Gargari and Permutations(求k个序列的LCS)相关推荐

  1. codeforces 463D Gargari and Permutations

    题意: 从所给的序列中找出它们的最长公共子序列. 思路: DAG(有向无环图)+BFS. 如果数值 i 在所有序列中都在 j 前面.则i -> j连一条有向边.(好像还有个dp的思路的) 参考: ...

  2. Gargari and Permutations CodeForces - 463D(建图+记忆化搜索)

    Gargari got bored to play with the bishops and now, after solving the problem about them, he is tryi ...

  3. Codeforces #264 (Div. 2) D. Gargari and Permutations

    Gargari got bored to play with the bishops and now, after solving the problem about them, he is tryi ...

  4. 2015多校10 1006.CRB and Puzzle HDU5411(邻接矩阵求k长路条数,矩阵快速幂

    题意:有若干字符,现在要把它们连成一个字符串,每种字符后面只能接特定种类的字符,现在询问能连接出的长度小于等于m的字符串有多少种. 思路:我们可以把这个转移关系看成一个图,如果字符a后面可以接b,那么 ...

  5. nyoj 1261 音痴又音痴的LT(离散化+树状数组求K小数)

    题目链接:http://acm.nyist.net/JudgeOnline/problem.php?pid=1261 解题思路:比较水的题,用离散化+树状数组求K小数即可,先用一次离线处理. #inc ...

  6. poj 2985(并查集+线段树求K大数)

    解题思路:这道题并查集很容易,合并时找到父节点就直接加上去就ok了.关键是如何求K大数,我一直在想用线段树怎么写,一开始想如果直接记录数的大小那肯定是没戏了,借鉴了一下别人的思路:区间[a,b]记录的 ...

  7. C语言学习之求∑k(k=100)+∑K*k(k=50)+∑1/k(k=10)

    求∑k(k=100)+∑K*k(k=50)+∑1/k(k=10) #include <stdio.h> #include <math.h> void main(){double ...

  8. 切比雪夫不等式例题讲解_14.初中数学:怎么求k的值?解一元一次不等式,基础常考题型...

    欢迎您来到方老师数学课堂,请点击上方蓝色字体,关注方老师数学课堂.所有的视频内容,全部免费,请大家放心关注,放心订阅. 初中数学:怎么求k的值?解一元一次不等式,基础常考题型.大家先在草稿本上认真地做 ...

  9. bk=1160,求k值,bn是一个集合{2^t+2^s+2^r}且t>s>r>=0程序验证

    bk=1160,求k值,bn是一个集合{2^t+2^s+2^r}且t>s>r>=0程序验证 程序验证结果为a145(10.0,7.0,3.0)=1160.0 k=145 程序验证: ...

  10. Codeforce 622 F. The Sum of the k-th Powers(拉格朗日插值求k次幂之和,拉格朗日插值公式)

    题目大意:求 ∑i=1nik\displaystyle\sum_{i = 1}^ni^ki=1∑n​ik 求k次幂有多种求法,例如: 伯努利数求k次幂之和(待补) 斯特林数求k次幂之和 拉格朗日插值法 ...

最新文章

  1. 我的理解:box-sizing
  2. AJAX跨域请求数据原理与案例
  3. 摄像头光圈大小对景深的影响
  4. Linux中的mysql.redis
  5. CSS边框,背景,边距,溢出
  6. TIDB事务过大transction too large解决方法
  7. 数学基础 —— 线性代数
  8. Leetcode每日一题:1030.matrix-cells-in-distance-order(距离顺序排列矩阵单元格)
  9. web表格在css中属性,CSS属性之表格(Table)_html/css_WEB-ITnose
  10. 计算机科学 —— 冯诺依曼结构
  11. 在ArcScene中导入显示自己在SketchUp创建并经过修饰的模型
  12. 软件设计师中级-数据库系统
  13. 正确修改SATA模式
  14. 2021-02-23 根据RNA-seq测序数据判断文库类型和链特异性
  15. 360手机怎样更新系统版本android,360手机N5迎来安卓7.0稳定版升级
  16. 2020年还需要阅读的10篇人工智能论文(附链接)
  17. type-c速度测试软件,速度篇—Type-C/USB3.0接口到底谁快_固态硬盘评测-中关村在线...
  18. DVWA全关教程手册
  19. 大学生一定要理解的十五件事!
  20. Vue项目大屏可视化适配 transform+解决高德地图经纬度偏移

热门文章

  1. 安装wordpress时候报错:Parse error: syntax error, unexpected '.', expecting '' or variable (T_VARIABLE)
  2. poj 2253 Frogger floyd 长路求权值最大边,属于简单题!!!!
  3. nuke软件功能有哪些?苹果Mac影视后期特效合成软件NUKE 13
  4. 在 Mac 上如何使用时间机器备份文件?
  5. iOS开发之$ pod setup时,CocoaPods报CocoaPods was not able to update the `master` repo.
  6. 艺术字体图标设计软件Art Text 4 for Mac
  7. Mac鼠标增强软件Bettertouchtool
  8. MATLAB R2021b for Mac(可视化数学分析软件)
  9. 基于USB armory 制作一个USB恶意软件分析器
  10. POJ 3729 Facer’s string 题解《挑战程序设计竞赛》