其他分享
首页 > 其他分享> > J - FatMouse's Speed

J - FatMouse's Speed

作者:互联网

  p的思路不一定要到最后去找到ans;也可以设置成在中间找到ans;比如J - FatMouse's Speed 这个题,如果要是让dp[n]成为最终答案的话,即到了i,最差的情况也是dp[i-1],就很难去保存路径,但是如果换一个思路,让dp[i]必须去参与,如果无法与前面的结合,那么就新开一个。

  最后路径是保存的逆序的,那么开一个stack就可以解决。

 

 1 //显然这个题是要维护两个变量的最长上升子序列 
 2 #include <iostream>
 3 #include <fstream>
 4 #include <algorithm>
 5 #include <cstring>
 6 #include <fstream>
 7 #include <stack>
 8 
 9 using namespace std;
10 //ifstream fin("a.txt");
11 struct node{
12     int weight,speed,num;
13 }a[10005];
14 bool cmp(node a,node b)
15 {
16     if(a.weight==b.weight)
17         return a.speed>b.speed;
18     else return a.weight<b.weight;
19 }
20 struct Node{
21     int cnt,now,pre;
22 }dp[10005];
23 int pre[10005];
24 int main()
25 {
26     int x,y;int i=1;
27     while(cin>>x>>y)
28     {
29         a[i].weight=x;a[i].speed=y,a[i].num=i;i++; 
30     }
31         sort(a+1,a+i,cmp);
32         dp[1].cnt=1;
33         for(int j=2;j<=i-1;j++)
34         {
35             dp[j].cnt=1; 
36             for(int k=j-1;k>=1;k--)
37             {
38                 if(a[j].speed<a[k].speed&&a[j].weight>a[k].weight)
39                     {
40                         if(dp[j].cnt<dp[k].cnt+1)
41                         {
42                             dp[j].cnt=dp[k].cnt+1;
43                             dp[j].pre=k;
44                             dp[j].now=a[j].speed;
45                         }
46                     }
47             }
48         }
49         int ans=0;
50         int m=i-1;
51         for(int j=1;j<=i-1;j++)
52         {
53             if(ans<dp[j].cnt)
54                 {
55                     ans=dp[j].cnt;
56                     m=j;
57                 }
58         }
59         
60         cout <<ans<<endl;
61         
62         stack <int> s;
63         s.push(a[m].num);ans--;
64         while(ans--)
65         {
66             s.push(a[dp[m].pre].num);
67             m=dp[m].pre;
68         }
69         while(!s.empty())
70         {
71             cout << s.top()<<endl;
72             s.pop();
73         }
74     return 0;
75  } 

 

标签:weight,Speed,FatMouse,num,ans,include,speed,dp
来源: https://www.cnblogs.com/Msmw/p/10345809.html