登 录
伪代码:
input:Num[n] Max[1..n]=1 for i<-2 to n for j<-1 to i-1 if Num[i]<Num[j] and Max[i]<=Max[j] then Max[i]<-Max[j]+1 Output(Maxam(Max[1..n])) 状态转移方程:max[i]=max{max[j]}+1,j<i;
#include <stdio.h> main() { int a[11], s[11], m[11]; int i, j, max; for (i = 1; i <= 10; i++) { printf("input number a[%d]:/n", i); scanf("%d", &a[i]); m[i] = 1; s[i] = -1; } m[1] = 1; for (i = 1; i <= 10; i++) for (j = 1; j < i; j++) if (a[j] <= a[i] && m[j] + 1 > m[i] ) { m[i] = m[j] + 1; s[i] = j; } max = 1; for (i = 1; i <= 10; i++) // printf("%d/t", m[i]); if (m[i] > m[max]) max = i; i = max; // printf("%d/n", i); while (s[i] != -1) { printf("%d/t", a[i]); i = s[i]; } printf("%d", a[i]); }
抱歉!评论已关闭.