AOJ-AHU-OJ-189 最长递增子序列(DFS)
2014-03-12 14:30
363 查看
[align=center]最长递增子序列[/align]
[align=center]Time Limit: 1000 ms Case Time Limit: 1000 ms Memory Limit: 64 MB
[/align]
[align=center][/align]
Description
有n个互不相同的整数an
若存在一个数列bm
其中对于任何1 < i < m
满足bi < bi+1 且 abi < abi+1
则称abn为an的一个递增子序列
试求出给定序列的最长递增子序列长度
Input
本题由多组数据组成,以EOF结束
Output
对于每组数据输出一行结果,代表最长递增序列长度
Sample Input
Sample Output
————————————————————激动的分割线————————————————————
思路:看到这一题,应该能想到,和滑雪其实是一样的。滑雪是二维的,它是一维的。自左向右,每次遇到递增的点,需要抉择走还是不走。每个结点向右DFS之后,保存了它能走的最长距离。DFS+记忆化搜索。
代码如下:
[align=center]Time Limit: 1000 ms Case Time Limit: 1000 ms Memory Limit: 64 MB
[/align]
[align=center][/align]
Description
有n个互不相同的整数an
若存在一个数列bm
其中对于任何1 < i < m
满足bi < bi+1 且 abi < abi+1
则称abn为an的一个递增子序列
试求出给定序列的最长递增子序列长度
Input
本题由多组数据组成,以EOF结束
第2N+1行 | 整数n,代表数组长度,1 <= n <= 7000 |
第2N+2行 | n个整数ai,0 <= ai <=231-1 |
对于每组数据输出一行结果,代表最长递增序列长度
Sample Input
Original | Transformed |
3 1 2 3 10 3 18 7 14 10 12 23 41 16 24
Sample Output
Original | Transformed |
3 6
————————————————————激动的分割线————————————————————
思路:看到这一题,应该能想到,和滑雪其实是一样的。滑雪是二维的,它是一维的。自左向右,每次遇到递增的点,需要抉择走还是不走。每个结点向右DFS之后,保存了它能走的最长距离。DFS+记忆化搜索。
代码如下:
#include <stdio.h> #include <string.h> #include <math.h> #include <stdlib.h> #define Max(a, b) (a > b ? a : b) int vis[7010]; int a[7010]; int len; int dfs(int k){ if(vis[k]) return vis[k];//记忆化搜索 vis[k] = 1; for(int d = 1; d < len; d++){//自然,方向是一路向右 int nk = k + d; if(a[nk] > a[k] && nk < len) vis[k] = Max(vis[k], dfs(nk) + 1);//某点可以走的话,该不该走?那么取MAX(它本身,走了该点之后的序列长度+1) } return vis[k]; } int main(){ while(~scanf("%d", &len)){ int maxi = -1; for(int i = 0; i < len; i++) scanf("%d", a+i); memset(vis, 0, sizeof(vis)); for(int i = 0; i < len; i++){ vis[i] = dfs(i);//对数列每个点进行dfs,如果已经记忆 maxi = Max(vis[i], maxi);//取最长的vis[] } printf("%d\n", maxi); } return 0; }
相关文章推荐
- AOJ-AHU-OJ-189 最长递增子序列(模拟+二分查找)
- AOJ 189 最长递增子序列(DP)
- leetcode 329. Longest Increasing Path in a Matrix 矩阵中寻找最长递增序列 + 一个典型的深度优先遍历DFS的做法
- AOJ 497 最长递增子序列 【DP】
- AOJ-AHU-OJ-517 序列(贪心)
- 华为OJ_竞赛_单词博弈:最长递增子序列长度
- 华为OJ——合唱队(序列的最长递增、递减序列)
- 华为OJ 合唱队 最长递增子序列,最长
- AOJ-AHU-OJ-497 最长起伏子序列
- LIS 最长有序子序列(递增/递减/非递增/非递减)
- hdu1025 Constructing Roads In JGShining's Kingdom(最长递增公共子序列二分法)
- 网络流24题(06)最长递增子序列问题(最多不相交路径 + 最大流)
- (转载)最长递增子序列 O(NlogN)算法
- 最长【递增】子序列:注意没有公共,即只有一个序列。
- 最长递增子序列 nlogn
- 最长公共子序列+最长递增子序列+最长递增公共子序列
- 数据结构:LISS最长递增子序列 动态规划DP
- AOJ-AHU-OJ-606 LOL系列之德玛短路
- 最长递增子序列 (LIS) Longest Increasing Subsequence
- 51nod--1134 最长递增子序列 (动态规划)