标签:acm c++ codeforces 栈 动态规划
#include <iostream>
#include <cstdio>
#include <vector>
#include <algorithm>
#define N 1010
using namespace std;
int pos[6][N],cnt[N],a[6][N],dp[N];
vector<int> q;
int main()
{
int n,k,ans=0;
scanf("%d%d",&n,&k);
for(int i=0;i<k;i++)
for(int j=0;j<n;j++)
scanf("%d",&a[i][j]);
for(int i=0;i<n;i++)
for(int j=0;j<k;j++){
int cur=a[j][i];
pos[j][cur]=i;
cnt[cur]++;
if(cnt[cur]==k){
if(q.size()==0) dp[cur]=1;
else for(int kk=0;kk<q.size();kk++){
bool flag=false;
for(int l=0;l<k;l++)
if(pos[l][cur]<pos[l][q[kk]]) {flag=true;break;}
if(!flag) dp[cur]=max(dp[cur],dp[q[kk]]+1);
else dp[cur]=max(dp[cur],1);
}
ans=max(ans,dp[cur]);
q.push_back(a[j][i]);
}
}
cout<<ans<<endl;
return 0;
}Codeforces 463D. Gargari and Permutations【DP】
标签:acm c++ codeforces 栈 动态规划
原文地址:http://blog.csdn.net/u013912596/article/details/38960249