ZOJ 1076

来源:互联网 发布:速卖通第三方软件 编辑:程序博客网 时间:2024/05/17 20:53

题目长……

题目本身是一道很水的LIS题。

时间:0毫秒。

空间:180KB。

//Time:0ms//Memory:180Kbytes//User:Lostwinder#include "stdio.h"#include "string.h"#include "stdlib.h"struct gene{int u,v,num;}g[1004];void swap(int *a,int *b){int t=*a;*a=*b;*b=t;}int cmp(const void *a,const void *b){int k=(*(gene *)a).u-(*(gene *)b).u;if(k)return k;else return (*(gene *)a).v-(*(gene *)b).v;}int main(){int i,j,d[1004],prev[1004],n,mx,stack[1004],top;while(1){scanf("%d",&n);if(!n)break;for(i=0;i<n;i++){scanf("%d%d",&g[i].u,&g[i].v);if(g[i].u>g[i].v)swap(&g[i].u,&g[i].v);g[i].num=i+1;}qsort(g,n,sizeof(g[0]),cmp);memset(d,0,sizeof(d));memset(prev,-1,sizeof(prev));d[0]=1;for(i=1;i<n;i++){d[i]=1;for(j=0;j<i;j++){if((d[j]+1>d[i])&&(g[j].v<g[i].u)){d[i]=d[j]+1;prev[i]=j;}}}top=0;mx=-1;for(i=0;i<n;i++){if(d[i]>mx){mx=d[i];j=i;}}top++;stack[top]=g[j].num;while(prev[j]!=-1){j=prev[j];top++;stack[top]=g[j].num;}/*for(i=0;i<n;i++){printf("%d%c",d[i],(i==n-1)?'\n':' ');}*/for(i=top;i>=1;i--){printf("%d%c",stack[i],(i==1)?'\n':' ');}}return 0;}


0 0
原创粉丝点击