這個題被坑慘了。
他不是按事件順序給的事件,而是按事件名字順序給的事件的順序
要轉換一下再LCSspa
#include<stdio.h> #include<string.h> #include<algorithm> using namespace std; int s[100]; int t[100]; int dp[100][100]; int lcs(int n) { memset(dp,0,sizeof(dp)); for(int i=1;i<=n;i++) { for(int j=1;j<=n;j++) { if(s[i]==t[j]) dp[i][j]=dp[i-1][j-1]+1; else dp[i][j]=max(dp[i-1][j],dp[i][j-1]); } } return dp[n][n]; } int main() { int n; scanf("%d",&n); int temp; for(int i=1;i<=n;i++) { scanf("%d",&temp); s[temp]=i; } while(scanf("%d",&temp)!=EOF) { t[temp]=1; for(int i=2;i<=n;i++) { scanf("%d",&temp); t[temp]=i; } printf("%d\n",lcs(n)); } return 0; }