uva 10131

来源:互联网 发布:c语言从1加到100 编辑:程序博客网 时间:2024/06/05 09:42

题意:给你许多大象的体重和IQ值,证明大象越重,智商越高的结论是错误的.把大象的体重按照升序排列,然后找IQ序列中的最长递减序列.

#include <iostream>#include <cstdio>#include <algorithm>#include <cstring>#include <stack>using namespace std;const int maxn = 1010;struct pnt{      int wet;//体重      int iq;      int id;}ele[maxn];struct strut{       int num;       int pre;}ans[maxn];bool Cmp(const pnt& a,const pnt& b){        if(a.wet == b.wet) return a.iq < b.iq;        return a.wet < b.wet;}int main(){    int k = 0;    while(~scanf("%d %d",&ele[k].wet,&ele[k].iq)){          ele[k].id = k + 1;          k++;    }    sort(ele,ele+k,Cmp);    for(int i=0; i<k; ++i){        ans[i].num  = 1;        ans[i].pre = i;    }    int cnt,pre=0;    for(int i=0; i<k; ++i){         cnt = 1;         for(int j=0; j<i; ++j)             if(ele[j].wet<ele[i].wet && ele[j].iq > ele[i].iq && ans[j].num+1>cnt ){                    cnt = ans[j].num + 1;                    pre = j;             }         if(ans[i].num < cnt){              ans[i].num = cnt;              //cout<<cnt<<endl;              ans[i].pre = pre;         }    }    int maxnum=1,mark;    for(int i=1; i<k; ++i){         if(ans[i].num > maxnum){            maxnum = ans[i].num;            mark = i;       }    }    //cout<<temp<<endl;    printf("%d\n",maxnum);    stack<int> sta;    while(maxnum--){          sta.push(ele[mark].id);          mark = ans[mark].pre;    }    while(!sta.empty()){          printf("%d\n",sta.top());          sta.pop();    }    return 0;}


 

原创粉丝点击