Uva--111(动态规划)
2014-07-10 22:02:50
题意&思路:根据给出的序列,求最长上升字串长度。(注意开一个位置数组,这里用e2【】)
1 #include <cstdio> 2 #include <iostream> 3 #include <cstring> 4 using namespace std; 5 6 int main(){ 7 int i,j,n,tmax,t1[25],t2[25],e2[25],dp[25]; 8 scanf("%d",&n); 9 for(i = 1; i <= n; ++i) 10 scanf("%d",&t1[i]); 11 while(scanf("%d",&t2[1]) == 1){ 12 e2[t2[1]] = 1; 13 tmax = 1; 14 for(i = 2; i <= n; ++i){ 15 scanf("%d",&t2[i]); 16 e2[t2[i]] = i; 17 } 18 for(i = 1; i <= n; ++i) dp[i] = 1; 19 for(i = 1; i <= n; ++i) 20 for(j = 1; j < i; ++j) 21 if(t1[e2[j]] < t1[e2[i]]){ 22 dp[i] = max(dp[i],dp[j] + 1); 23 tmax = max(tmax,dp[i]); 24 } 25 printf("%d\n",tmax); 26 } 27 return 0; 28 }