非 动态规划---LIS
2013-10-19 15:39
253 查看
题目:一个序列有N个数:A[1],A[2],…,A
,求出最长非降子序列的长度。(见动态规划---LIS)
,求出最长非降子序列的长度。(见动态规划---LIS)
/* 题目:一个序列有N个数:A[1],A[2],…,A ,求出最长非降子序列的长度。 */ #include <stdio.h> unsigned max_len( int [] , size_t ); size_t b_point( int [] , size_t ); int max(size_t , size_t ); int main( void ) { int arr[] = { 4 , 5 , 3 , 3 , 3 , 3 , 6 , 5 , 1 , 2 }; printf("%u\n" , max_len( arr , sizeof arr / sizeof arr[0] ) ); return 0; } unsigned max_len( int a[] , size_t n ) { if ( n <= 1u ) return n ; size_t m = b_point ( a , n ) ; return max( m , max_len ( a + m , n - m ) ) ; } size_t b_point ( int a[] , size_t n ) { size_t i ; for ( i = 1u ; i < n ; i++ ) if ( a[i-1] > a[i]) return i - 0u ; return i - 0u ; } int max( size_t n1 , size_t n2 ) { if ( n1 > n2 ) return n1; return n2; }
/* 题目:一个序列有N个数:A[1],A[2],…,A ,求出最长非降子序列的长度。 */ #include <stdio.h> unsigned max_len( int [] , size_t ); size_t b_point( int [] , size_t ); int main( void ) { int arr[] = { 4 , 5 , 3 , 3 , 3 , 3 , 6 , 5 , 1 , 2 }; printf("%u\n" , max_len( arr , sizeof arr / sizeof arr[0] ) ); return 0; } unsigned max_len( int a[] , size_t n ) { size_t len = 0u ; while ( n > 0u ) { size_t mid = b_point( a , n ); if ( mid > len ) len = mid ; a += mid ; n -= mid ; } return len ; } size_t b_point ( int a[] , size_t n ) { size_t i ; for ( i = 1u ; i < n ; i++ ) if ( a[i-1] > a[i]) return i - 0u ; return i - 0u ; }
相关文章推荐
- 动态规划面试题基础合集1--数学三角形,LIS , LCS, CSD
- 动态规划---LIS
- POJ 1836 Alignment (动态规划LIS)
- 算法(一) --DP动态规划(LIS和LCS)
- 动态规划专题小结:最长上升子序列(LIS)问题
- 动态规划 LIS最长上升子序列
- hdu1087 动态规划入门LIS
- 最长上升子序列(LIS)的O(nlogn) & O(n^2)算法 - 动态规划
- 动态规划——LIS问题
- HDU:1257 最少拦截系统(贪心+动态规划DP||LIS?)
- 51Nod 1134最长递增子序列(Java_LIS 动态规划 三种方法实现)
- POJ1065 动态规划 LIS
- 合唱队形(LIS) 动态规划
- 动态规划(篇2)最长递增子序列(LIS)
- Python动态规划求解最长递增子序列(LIS)
- 动态规划03—最长非降子序列的长度(LIS)
- [动态规划]之裸lis之最长上升子序列POJ 2533
- 最长不降子序列 LIS(Longest Increasing Subsequence) 动态规划与深度搜索
- 动态规划4:LIS最长递增子序列问题
- [ACM_动态规划] 最长上升子序列(LIS)