cf 463D
Gargari got bored to play with the bishops and now, after solving the problem about them, he is trying to do math homework. In a math book he have found k permutations. Each of them consists of numbers 1, 2, ..., n in some order. Now he should find the length of the longest common subsequence of these permutations. Can you help Gargari?
You can read about longest common subsequence there:https://en.wikipedia.org/wiki/Longest_common_subsequence_problem
The first line contains two integers n and k (1 ≤ n ≤ 1000; 2 ≤ k ≤ 5). Each of the next k lines contains integers 1, 2, ..., n in some order — description of the current permutation.
Print the length of the longest common subsequence.
4 3
1 4 2 3
4 1 2 3
1 2 4 3
3
The answer for the first test sample is subsequence [1, 2, 3].
#include<iostream>
#include<cstdio>
#include<cstring>
#include<string>
#include<cmath>
#include<cstdlib>
#include<algorithm>
using namespace std;
int n,k,cnt[1002][1002],a[1002],f[1002];
int main()
{
int ans=0;
scanf("%d%d",&n,&k);
for(int i=0;i<k;i++)
{
for(int j=0;j<n;j++)
{
scanf("%d",&a[j]);
for(int c=0;c<j;c++)
cnt[a[c]][a[j]]++;
}
}
for(int i=0;i<n;i++)
{
f[a[i]]=1;
for(int j=0;j<i;j++)
{
if(cnt[a[j]][a[i]]==k)
{
f[a[i]]=max(f[a[i]],f[a[j]]+1);
}
}
ans=max(ans,f[a[i]]);
}
printf("%d\n",ans);
return 0;
}

浙公网安备 33010602011771号