【题目描述】
XXXX年突然有外星人造访,但大家语言不通,不过科学家们经过研究发现外星人用26个英文字母组成的单词中最长不降子序列的长度来表述数字,且英文字母的排列顺序不同,现给出其排列顺序,再给出外星人说的每个数字(其实是每个英文单词,用空格隔开),翻译出外星人所说的数字(连续输出,最后加回车)。因为是最长不降子序列,所以数字中没有0,也就是说外星人的数字是>=1的数字。 【输入格式】 第一行一个含有26个小写字母的字符串,保证不重复 第二行一个长度<=255的字符串表示英文单词,用空格隔开 【输出格式】 外星人所说的数字 【样例输入】 abcdefghijklmnopqrstuvwxyz abcd efg hhh ihg 【样例输出】 4331 【样例解释】 由第一个字符串得a=1,b=2,c=3,d=4,…,z=26 单词abcd即1234,最长不下降子序列长度为4 单词efg即567,最长不下降子序列长度为3 单词hhh即888,最长不下降子序列长度为3 单词ihg即987,最长不下降子序列长度为1 【分析】 动态规划+字符串处理,可以轻松过掉。var a:array[1..1000]of longint; lis:array[1..1000]of longint; number:array['a'..'z']of longint; i,j,n,ans:longint; st,ss:string;begin readln(st); for i:=1 to 26 do number[st[i]]:=i; readln(st); st:=st+' '; repeat ss:=copy(st,1,pos(' ',st)); delete(st,1,pos(' ',st)); n:=length(ss); for i:=1 to n do a[i]:=number[ss[i]]; for i:=1 to n do lis[i]:=1; for i:=2 to n do for j:=1 to i-1 do if (a[j]<=a[i])and(lis[j]+1>lis[i]) then lis[i]:=lis[j]+1; ans:=0; for i:=1 to n do if ans