HDU 1160(记录路径的最长上升子序列)

来源:互联网 发布:淘宝退款写了假冒品牌 编辑:程序博客网 时间:2024/06/05 15:43

那一个pre记录一下路径,递归输出就行了。

n2可以过


#include <bits/stdc++.h>using namespace std;#define INF 0x3f3f3f3fconst int maxn = 10000+10;struct Mouse{    int speed,wight,pos;    operator < (const Mouse &t)    {        return wight < t.wight;    }}s[maxn];int pre[maxn];int max_length[maxn];void print(int x){    if(x != 0)    {        print(pre[x]);        cout << s[x].pos << endl;    }}int main(){    int E = 0;    while(scanf("%d%d",&s[E].wight , &s[E].speed) != EOF)    {        s[E].pos = E+1;        E++;    }    sort(s,s+E);//    for(int i = 0 ; i < E  ; i++) cout << s[i].wight << endl;    int maxx = 0;    int ed;    max_length[0] = 1;    for(int i = 1 ; i < E ; i++)    {        max_length[i] = 1;        for(int j = 0 ; j < i ; j++)        {            if(s[i].wight > s[j].wight &&s[i].speed < s[j].speed && max_length[j]+1 > max_length[i])            {                pre[i] = j;                max_length[i] = max_length[j] + 1;                if(max_length[i] > maxx)                {                    maxx = max_length[i];                    ed = i;                }            }        }    }    cout << maxx << endl;    if(maxx)    print(ed);    return 0;}

阅读全文
0 0
原创粉丝点击