首页 > 代码库 > hdu--1160--LIS+打印路径
hdu--1160--LIS+打印路径
这题做完 就去吃饭了...
快1年了 没有正常的饮食....
这题 数据蛮小的 1000可以用O(n^2)水过 而且只花了0ms
一般来说 打印路径是正序输出 而我们记录的时候都是 逆序记录的 所以 借用下stack特别好用
touch me
1 #include <iostream> 2 #include <algorithm> 3 #include <stack> 4 using namespace std; 5 6 const int size = 1010; 7 struct data 8 { 9 int id;10 int w;11 int speed;12 }mice[size];13 int road[size];14 int len[size];15 stack< int >s;16 17 bool cmp( data p , data q )18 {19 if( p.w == q.w )20 return p.speed>q.speed;21 return p.w<q.w; 22 }23 24 bool judge( data& p , data& q )25 {26 if( q.w>p.w && q.speed<p.speed )27 return true;28 return false;29 }30 31 int main()32 {33 cin.sync_with_stdio(false);34 int ans , pos , cnt;35 cnt = pos = 1;36 ans = 0;37 while( cin >> mice[cnt].w >> mice[cnt].speed )38 {39 mice[cnt].id = cnt;40 len[cnt] = 1;41 road[cnt] = -1;42 cnt++;43 }44 sort( mice+1 , mice+cnt+1 , cmp );45 while( !s.empty() )46 s.pop();47 for( int i = 1 ; i<cnt ; i++ )48 {49 for( int j = i+1 ; j<=cnt ; j++ )50 {51 if( judge( mice[i] , mice[j] ) )52 {53 if( len[j] < len[i]+1 )54 {55 len[j] = len[i]+1;56 road[j] = i;57 }58 if( len[j] > ans )59 {60 ans = len[j];61 pos = j;62 }63 }64 }65 }66 cout << ans << endl;67 for( int i = pos ; ; i=road[i] )68 {69 s.push( mice[i].id );70 if( road[i] == -1 )71 break;72 }73 while( !s.empty() )74 {75 cout << s.top() << endl;76 s.pop();77 }78 return 0;79 }
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。