非 动态规划---LIS

时间:2023-03-09 06:29:00
非 动态规划---LIS

题目:一个序列有N个数:A[1],A[2],…,A[N],求出最长非降子序列的长度。(见动态规划---LIS)

 /*
题目:一个序列有N个数:A[1],A[2],…,A[N],求出最长非降子序列的长度。
*/
#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[] = { , , , , , , , , , }; printf("%u\n" , max_len( arr , sizeof arr / sizeof arr[] ) ); return ;
} 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-] > 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[N],求出最长非降子序列的长度。
*/
#include <stdio.h> unsigned max_len( int [] , size_t );
size_t b_point( int [] , size_t ); int main( void )
{
int arr[] = { , , , , , , , , , }; printf("%u\n" , max_len( arr , sizeof arr / sizeof arr[] ) ); return ;
} 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-] > a[i])
return i - 0u ; return i - 0u ;
}