注:连不上UVA,还没有AC,所以仅作为参考
动态规划题,根据学生给的历史事件的顺序,与正确的历史事件顺序进行比较,找出其中最长的递增序列,可以参考编程之美中关于最长递增序列的解答。在输入测试数据的时候,处理一下数据。
输入:第一行是正确的事件顺序,接下来为学生的答案
103 1 2 4 9 5 10 6 8 7//意思是:1事项在第三个时间位置发生,2事项在第一个时间发生以此类推:转化为:2 3 1 4 6 8 10 9 5 71 2 3 4 5 6 7 8 9 104 7 2 3 10 6 9 1 5 83 1 2 4 9 5 10 6 8 72 10 1 3 8 4 9 5 7 6 输出: 依次输出每个case 的答案 代码:
#include#include int count(int *cas,int letters_num){ int lis[20],i,j,MAX=0; memset(lis,0,20*sizeof(int)); for (i=0;i cas[j]&&lis[j]+1>lis[i])//满足动态规划的条件,即前面的状态不会影响到后面的状态 { lis[i]=lis[j]+1; } } } for(i=0;i