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

题意:

  给你k个1到n的排列,问你它们的LCS(最长公共子序列)是多长。

题解:

  因为都是1到n的排列,即每个串中,1到n每个数字恰好出现一次。

  将相同的数字之间相连,可以得到下面的样子(n = 4, k = 3):

  

  显然,要求的LCS就等于图中互不相交的最多连线个数。

  将每一个数字看做一个节点。

  若i到j有一条有向边,则代表:

    数字j的连线在i的连线的后面,且互不相交。

  即:

    若i->j,则要满足所有的pos[k][i] <= pos[k][j]。

    其中pos[k][i]表示第k个串中,数字i出现的位置。

  O(N^2*K)建图,最终得到的一定是一个有向无环图。

  LCS就等于这个图上的最长路径长度。

  所以dfs跑一边dp就行了。

AC Code:

 #include <iostream>
#include <stdio.h>
#include <string.h>
#include <vector>
#define MAX_N 1005
#define MAX_K 10 using namespace std; int n,k;
int dp[MAX_N];
int a[MAX_K][MAX_N];
int pos[MAX_K][MAX_N];
vector<int> edge[MAX_N]; void read()
{
cin>>n>>k;
for(int i=;i<=k;i++)
{
for(int j=;j<=n;j++)
{
cin>>a[i][j];
pos[i][a[i][j]]=j;
}
}
} bool is_valid(int x,int y)
{
for(int i=;i<=k;i++)
{
if(pos[i][x]>=pos[i][y]) return false;
}
return true;
} void build()
{
for(int i=;i<=n;i++)
{
for(int j=;j<=n;j++)
{
if(is_valid(i,j)) edge[i].push_back(j);
}
}
} void dfs(int now)
{
dp[now]=;
for(int i=;i<edge[now].size();i++)
{
int temp=edge[now][i];
if(dp[temp]==-) dfs(temp);
dp[now]=max(dp[now],dp[temp]+);
}
} void work()
{
build();
memset(dp,-,sizeof(dp));
int ans=;
for(int i=;i<=n;i++)
{
if(dp[i]==-) dfs(i);
ans=max(ans,dp[i]);
}
cout<<ans<<endl;
} int main()
{
read();
work();
}

Codeforces 463D Gargari and Permutations:隐式图dp【多串LCS】的更多相关文章

  1. Codeforces 463D Gargari and Permutations(求k个序列的LCS)

    题目链接:http://codeforces.com/problemset/problem/463/D 题目大意:给你k个序列(2=<k<=5),每个序列的长度为n(1<=n< ...

  2. Codeforces 463D Gargari and Permutations

    http://codeforces.com/problemset/problem/463/D 题意:给出k个排列,问这k个排列的最长公共子序列的长度. 思路:只考虑其中一个的dp:f[i]=max(f ...

  3. codeforces 463D Gargari and Permutations(dp)

    题目 参考网上的代码的... //要找到所有序列中的最长的公共子序列, //定义状态dp[i]为在第一个序列中前i个数字中的最长公共子序列的长度, //状态转移方程为dp[i]=max(dp[i],d ...

  4. 【UVA】658 - It&#39;s not a Bug, it&#39;s a Feature!(隐式图 + 位运算)

    这题直接隐式图 + 位运算暴力搜出来的,2.5s险过,不是正法,做完这题做的最大收获就是学会了一些位运算的处理方式. 1.将s中二进制第k位变成0的处理方式: s = s & (~(1 < ...

  5. 八数码问题+路径寻找问题+bfs(隐式图的判重操作)

    Δ路径寻找问题可以归结为隐式图的遍历,它的任务是找到一条凑够初始状态到终止问题的最优路径, 而不是像回溯法那样找到一个符合某些要求的解. 八数码问题就是路径查找问题背景下的经典训练题目. 程序框架 p ...

  6. uva658(最短路径+隐式图+状态压缩)

    题目连接(vj):https://vjudge.net/problem/UVA-658 题意:补丁在修正 bug 时,有时也会引入新的 bug.假定有 n(n≤20)个潜在 bug 和 m(m≤100 ...

  7. nyoj 21--三个水杯(隐式图bfs)

    三个水杯 时间限制:1000 ms  |  内存限制:65535 KB 难度:4 描述 给出三个水杯,大小不一,并且只有最大的水杯的水是装满的,其余两个为空杯子.三个水杯之间相互倒水,并且水杯没有标识 ...

  8. UVA 658 状态压缩+隐式图+优先队列dijstla

    不可多得的好题目啊,我看了别人题解才做出来的,这种题目一看就会做的实在是大神啊,而且我看别人博客都看了好久才明白...还是对状态压缩不是很熟练,理解几个位运算用了好久时间.有些题目自己看着别人的题解做 ...

  9. UVA - 658 It's not a Bug, it's a Feature! (隐式图的最短路,位运算)

    隐式的图搜索,存不下边,所以只有枚举转移就行了,因为bug的存在状态可以用二进制表示,转移的时候判断合法可以用位运算优化, 二进制pre[i][0]表示可以出现的bug,那么u&pre[i][ ...

随机推荐

  1. oracle查询当前会话数量

    SELECT a.inst_id,sid,username,event,sql_id,a.PROGRAM FROM gv$session a WHERE a.STATUS='ACTIVE' AND u ...

  2. route 命令

    Linux系统的route命令用于显示和操作IP路由表(show / manipulate the IP routing table).要实现两个不同的子网之间的通信,需要一台连接两个网络的路由器,或 ...

  3. PHP 学习内容

    第一阶段: (PHP+MySQL核心编程) 面向对象编程 MySQL数据库, MySQL的优化细节. HTTP协议,http也是我们web开发的基石.对我们了解PHP底层机制有很大帮助,做到知其然,还 ...

  4. Android 你可能忽略的提高敲代码效率的方式 (转)

    每日推荐 Eyepetizer-in-Kotlin:一款简约的小视频app,带你走进kotlin 作为学习kotlin的一款app,在撸代码的过程中学习kotlin的语法及特性. Eyepetizer ...

  5. CentOS 6.4 yum安装LAMP环境

    一.制作连外网的yum源文件 1.  centOS安装完成时是默认存在的,不需要做任何操作,可以直接使用yum 命令进行操作, 默认是在 /etc/yum.repos.d/目录下的 2. 如果你因为制 ...

  6. Linux下的目录操作

    . 此层目录 .. 上层目录 - 前一个工作目录 ~ 当前用户的工作目录 ~account 表示account的家目录 1.cd:改变目录,change Directory的缩写. 2.pwd:显示当 ...

  7. Python的Django框架中的Context使用

    Python的Django框架中的Context使用 近期整理些Python方面的知识,一旦你创建一个 Template 对象,你能够用 context 来传递数据给它. 一个context是一系列变 ...

  8. Android设备各种使用尺寸整理

    // 获取屏幕的宽度.高度 Display defDip = getWindowManager().getDefaultDisplay(); int disWidth = defDip.getWidt ...

  9. hihocoder1260,1261 (HASH经典题)

    这两题比赛做的时候各种卡,太久没有写过这种类型的题目了.各种细节想不清楚. 赛后看下网上大部分题解的代码,发现大部分都是直接用TRIE+暴力直接搞的--!,随便找了份代码发现有些数据这种做法是超时的, ...

  10. 【python】-- web开发之JavaScript

    JavaScript JavaScript是一门编程语言,浏览器内置了JavaScript语言的解释器,所以在浏览器上按照JavaScript语言的规则编写相应代码之,浏览器可以解释并做出相应的处理. ...