hdu1160

来源:互联网 发布:2016年气象数据 编辑:程序博客网 时间:2024/06/04 18:21
/*
分析:
    和最长升(降)序列得dp方法一样,只是排序方法变一下下
就行了。


                                             2012-07-10
*/








#include"stdio.h"#include"stdlib.h"struct A{int num;int pre;int dp;int w,s;}E[1011];int cmp(const struct A *a,const struct A *b){if(a->w!=b->w)return a->w-b->w;elsereturn b->w-a->w;}void print(int d){if(E[d].pre==d){printf("%d\n",E[d].num);return ;}print(E[d].pre);printf("%d\n",E[d].num);}int main(){int k=0;int i,l;int ans,key;while(scanf("%d%d",&E[k].w,&E[k].s)!=-1)k++;for(i=0;i<k;i++)E[i].num=i+1;qsort(E,k,sizeof(E[0]),cmp);for(i=0;i<k;i++){E[i].pre=i;E[i].dp=0;}E[0].dp=1;for(i=1;i<k;i++){for(l=0;l<i;l++){if(E[l].w<E[i].w&&E[l].s>E[i].s){if(E[l].dp>E[i].dp){E[i].dp=E[l].dp;E[i].pre=l;}}}E[i].dp++;}ans=0;key=-1;for(i=0;i<k;i++)if(E[i].dp>ans){ans=E[i].dp;key=i;}printf("%d\n",ans);print(key);return 0;}