History Grading(uva 111)

来源:互联网 发布:it 网络 编辑:程序博客网 时间:2024/05/22 00:16

基础的lcs,错了好几遍的原因:

1:题意,首先给出的序列并不是我们要求的,而是代表了第几个数的历史时间,要经过转化。

2:怎样退出,没有告诉你到底有几个。


#include<stdio.h>#include<iostream>#include<vector>#include<string.h>using namespace std;int a[25];int b[25];int s[25][25];int n;int ans;void solve1();void solve2();int main(){scanf("%d",&n);if(n>=1){for(int i=1;i<=n;i++){int temp; scanf("%d",&temp);a[temp] = i;}while(1){for(int i=1;i<=n;i++){int temp;if(scanf("%d",&temp)==EOF)return 0;b[temp] = i;}ans = 0;memset(s,0,sizeof(s));solve2();//剪下枝,若完全一样就不用dp了 if(ans!=n)solve1();printf("%d\n",s[n][n]>ans?s[n][n]:ans);}}return 0;}void solve2(){for(int i=1;i<=n;i++){if(a[i]==b[i])ans++;}}void solve1(){for(int i=1;i<=n;i++){//bfor(int j=1;j<=n;j++){//aif(b[i]==a[j]){s[i][j] = s[i-1][j-1]+1;}else{s[i][j] = max(s[i][j-1],s[i-1][j]);}}}}


0 0