标签:
题目大意:
这是个大英文题啊
他给你老鼠的体重和奔跑的速度
然后当体重呈升序的时候 速度的最长下降序列
这都不重要 重要的是还要打印路径
分析:
就是先对体重排序
然后求最长下降序列
再求的过程中记录路径 最后输出
#include<stdio.h> #include<string.h> #include<math.h> #include<algorithm> #include<iostream> #include<math.h> #include<stdlib.h> using namespace std; #define INF 0xfffffff #define N 5000 struct node { int num,w,s; }a[N]; int cmp(const void *x,const void *y) { struct node *c,*d; c=(struct node *)x; d=(struct node *)y; if(c->w!=d->w) return c->w-d->w; else return d->s-c->s; } int main() { int i=0,pre[N],dp[N]; while(scanf("%d %d",&a[i].w,&a[i].s)!=EOF) { dp[i]=1; pre[i]=0; a[i].num=i+1; i++; } int n=i,b,Max=0; qsort(a,n,sizeof(a[0]),cmp); for(i=0;i<n;i++) { for(int j=0;j<i;j++) { if(a[j].w<a[i].w&&a[j].s>a[i].s&&dp[j]+1>dp[i]) { dp[i]=dp[j]+1; pre[i]=j; if(Max<dp[i]) { b=i; Max=dp[i]; } } } } int aa[N]; printf("%d\n",Max); aa[0]=a[b].num; i=1; while(1) { int j=pre[b]; if(j==0) break; aa[i++]=a[j].num; b=j; } for(int j=i-1;j>=0;j--) printf("%d\n",aa[j]); return 0; }
FatMouse's Speed--hdu1160(dp+输出路径)
标签:
原文地址:http://www.cnblogs.com/linliu/p/5141674.html