1A 破题敲了一个多小时 最长上升子序列和最长下降子序列合起来 并把路径保留下来 题中是可以打乱顺序去找的 先按W上升或S下降排下序 再按最升和最降做
View Code
1 #include2 #include 3 #include 4 #include 5 using namespace std; 6 struct node 7 { 8 int w,s,xu; 9 }q[1011];10 bool cmp(node a,node b)11 {12 return a.w q[j].s&&dp[k]+1>tmax)36 {37 tmax = dp[k]+1;38 for(g = 1 ; g <= dp[k] ; g++)39 da[j][g] = da[k][g];40 da[j][tmax] = q[j].xu;41 }42 dp[j] = tmax;43 if(tmax>max)44 {45 max = tmax;46 x = j;47 }48 }49 printf("%d\n",max);50 for(i = 1 ; i <= max ; i++)51 printf("%d\n",da[x][i]);52 return 0;53 }