DP--最长上升子序列
2015-11-08 14:59
381 查看
#include <cstdio> #include <cstring> #include <algorithm> using namespace std; const int maxn = 100; int a[maxn], d[maxn], c[maxn], n; int dp(int i) { int ans = 0; for(int j=i+1; j<=n; j++) { if(a[i] < a[j]) ans = max(ans, dp(j) + 1); } return ans; } int main() { while(~scanf("%d", &n)) { for(int i=1; i<=n; i++) { scanf("%d", &a[i]); d[i] = 1; c[i] = 0; } for(int i=n-1; i>0; i--) { int mx = 0, p = 0; for(int j=i+1; j<=n; j++) { if(a[i]<a[j] && d[j]>mx) { mx = d[j]; p = j; } } if(p) { d[i] = d[p] + 1; c[i] = p; } } int mx = 0, p = 0; for(int i=1; i<=n; i++) if(d[i] > mx) { mx = d[i]; p = i; } printf("%d\n", mx); while(p) { printf("%d ", a[p]); p = c[p]; } printf("\n%d\n", dp(0)); } return 0; }
相关文章推荐
- 地理编码和反地理编码
- Android Service和Thread的区别
- Python pickle 的 dump() & load()
- 用Gparted调整ubuntu磁盘分区
- lightoj 1245 - Harmonic Number (II) 【数学 计数】
- 第三章 分支结构程序
- objective-c系列-NSString
- 内存溢出(OOM)and内存泄露---及其解决
- Ubuntu14.04+hadoop2.5.2完全分布式集群搭建
- MySQL常用命令
- matrix_world_final_2012
- Light oj1354:IP Checking
- view getwidth() 和getMeasuredWidth()区别
- java中线程安全的讲解
- 程序猿书单--转载
- 转自一个CG大神的文章
- D3.js数据可视化(三)——地图可视化
- 二叉树的各种遍历算法的递归和非递归实现
- S3C2440 NAND Flash的使用
- C++实现动态绑定代码分享