這一題即是稍做變化的Longest Increasing Subsequence (LIS)問題,但要注意的是input資料。input資料是Event的Order:
Event: 1 2 3 4 5 6 7 8 9 10
Order: 3 1 2 4 9 5 10 6 8 7
即是Event by Order是: 2, 3, 1, 4, 6, 8, 10, 9, 5, 7。學生的回答也需要做如此的調整,比對出來才是正確的解答。原本沒有搞清楚,就想不通為什麼sample output跟自己算的答案不一樣了!
REFERENCE
Longest Increasing Subsequence
CODE
#include <stdio.h> #define MAX 20 int main(){ int i, j, t; int n, c[MAX+1], r[MAX+1], lis[MAX+1], max; scanf("%d", &n); /*Read Correct Order*/ for(i=1; i<=n; i++) scanf("%d", &c[i]); /*Read Student Response*/ while( scanf("%d", &t) != EOF){ r[t] = 1; max = lis[1] = 1; for(i=2; i<=n; i++){ scanf("%d", &t); r[t] = i; lis[i] = 1; } for(i=2; i<=n; i++){ for(j=1; j<i; j++) if( c[ r[i] ] > c[ r[j] ] ) if( lis[i] < (lis[j] + 1) ) lis[i] = lis[j] + 1; if( max < lis[i] ) max = lis[i]; }/*i*/ printf("%d\n", max); }/*while*/ exit(0); }
No comments:
Post a Comment