标签: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