Codeforces 463D Gargari and Permutations(求k个序列的LCS)
题目链接: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)相关推荐
- codeforces 463D Gargari and Permutations
题意: 从所给的序列中找出它们的最长公共子序列. 思路: DAG(有向无环图)+BFS. 如果数值 i 在所有序列中都在 j 前面.则i -> j连一条有向边.(好像还有个dp的思路的) 参考: ...
- Gargari and Permutations CodeForces - 463D(建图+记忆化搜索)
Gargari got bored to play with the bishops and now, after solving the problem about them, he is tryi ...
- 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 ...
- 2015多校10 1006.CRB and Puzzle HDU5411(邻接矩阵求k长路条数,矩阵快速幂
题意:有若干字符,现在要把它们连成一个字符串,每种字符后面只能接特定种类的字符,现在询问能连接出的长度小于等于m的字符串有多少种. 思路:我们可以把这个转移关系看成一个图,如果字符a后面可以接b,那么 ...
- nyoj 1261 音痴又音痴的LT(离散化+树状数组求K小数)
题目链接:http://acm.nyist.net/JudgeOnline/problem.php?pid=1261 解题思路:比较水的题,用离散化+树状数组求K小数即可,先用一次离线处理. #inc ...
- poj 2985(并查集+线段树求K大数)
解题思路:这道题并查集很容易,合并时找到父节点就直接加上去就ok了.关键是如何求K大数,我一直在想用线段树怎么写,一开始想如果直接记录数的大小那肯定是没戏了,借鉴了一下别人的思路:区间[a,b]记录的 ...
- 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 ...
- 切比雪夫不等式例题讲解_14.初中数学:怎么求k的值?解一元一次不等式,基础常考题型...
欢迎您来到方老师数学课堂,请点击上方蓝色字体,关注方老师数学课堂.所有的视频内容,全部免费,请大家放心关注,放心订阅. 初中数学:怎么求k的值?解一元一次不等式,基础常考题型.大家先在草稿本上认真地做 ...
- 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 程序验证: ...
- Codeforce 622 F. The Sum of the k-th Powers(拉格朗日插值求k次幂之和,拉格朗日插值公式)
题目大意:求 ∑i=1nik\displaystyle\sum_{i = 1}^ni^ki=1∑nik 求k次幂有多种求法,例如: 伯努利数求k次幂之和(待补) 斯特林数求k次幂之和 拉格朗日插值法 ...
最新文章
- 我的理解:box-sizing
- AJAX跨域请求数据原理与案例
- 摄像头光圈大小对景深的影响
- Linux中的mysql.redis
- CSS边框,背景,边距,溢出
- TIDB事务过大transction too large解决方法
- 数学基础 —— 线性代数
- Leetcode每日一题:1030.matrix-cells-in-distance-order(距离顺序排列矩阵单元格)
- web表格在css中属性,CSS属性之表格(Table)_html/css_WEB-ITnose
- 计算机科学 —— 冯诺依曼结构
- 在ArcScene中导入显示自己在SketchUp创建并经过修饰的模型
- 软件设计师中级-数据库系统
- 正确修改SATA模式
- 2021-02-23 根据RNA-seq测序数据判断文库类型和链特异性
- 360手机怎样更新系统版本android,360手机N5迎来安卓7.0稳定版升级
- 2020年还需要阅读的10篇人工智能论文(附链接)
- type-c速度测试软件,速度篇—Type-C/USB3.0接口到底谁快_固态硬盘评测-中关村在线...
- DVWA全关教程手册
- 大学生一定要理解的十五件事!
- Vue项目大屏可视化适配 transform+解决高德地图经纬度偏移
热门文章
- 安装wordpress时候报错:Parse error: syntax error, unexpected '.', expecting '' or variable (T_VARIABLE)
- poj 2253 Frogger floyd 长路求权值最大边,属于简单题!!!!
- nuke软件功能有哪些?苹果Mac影视后期特效合成软件NUKE 13
- 在 Mac 上如何使用时间机器备份文件?
- iOS开发之$ pod setup时,CocoaPods报CocoaPods was not able to update the `master` repo.
- 艺术字体图标设计软件Art Text 4 for Mac
- Mac鼠标增强软件Bettertouchtool
- MATLAB R2021b for Mac(可视化数学分析软件)
- 基于USB armory 制作一个USB恶意软件分析器
- POJ 3729 Facer’s string 题解《挑战程序设计竞赛》