最长单调递增子序列

原创 2005年04月22日 16:09:00

先是c语言的版本:

#include <stdio.h>
main()
{
 int a[11], s[11], m[11];
 int i, j, max;

 for (i = 1; i <= 10; i++) {
  printf("input number a[%d]:/n", i);
  scanf("%d", &a[i]);
  m[i] = 1;
  s[i] = -1;
 }

 m[1] = 1;

 for (i = 1; i <= 10; i++)
  for (j = 1; j < i; j++)
   if (a[j] <= a[i] && m[j] + 1 > m[i] ) {
    m[i] =  m[j] + 1;
    s[i] = j;
   }

 max = 1;
 for (i = 1; i <= 10; i++)
 // printf("%d/t", m[i]);
  if (m[i] > m[max])
   max = i;
 i = max;
// printf("%d/n", i);
 while (s[i] != -1) {
  printf("%d/t", a[i]);
  i = s[i];
 }
 printf("%d", a[i]);

然后是python版的:

a = [0]*11                                                                    
s = [0]*11                                                                    
m = [0]*11                                                                    
print a                                                                       
print s                                                                       
print m                                                                       
for i in range(1, 11):                                                        
    a[i] = int(raw_input("input number a[%d]:/n" %(i)))                       
    m[i] = 1                                                                  
    s[i] = -1                                                                 
m[1] = 1                                                                      
print a                                                                       
print s                                                                       
print m                                                                       
                                                                              
for i in range(1,11):                                                         
    for j in range(1, i):                                                     
        if a[j] <= a[i] and m[j] + 1 > m[i]:                                  
            m[i] = m[j] + 1                                                   
            s[i] = j                                                          
max = 1                                                                       
for i in range(1, 11):                                                         
    if m[i] > m[max]: 

           max = i                                                               
i = max                                                                       
while s[i] != -1:                                                             
    print a[i]                                                                
    i = s[i]                                                                  
print a[i] 

nyist oj 17 单调递增最长子序列 (动态规划经典题)

单调递增最长子序列 时间限制:3000 ms  |  内存限制:65535 KB 难度:4 描述求一个字符串的最长递增子序列的长度 如:dabdbf最长递增子序列就是abd...
  • u014253173
  • u014253173
  • 2014年08月15日 11:37
  • 4506

最长单调递增子序列的三种解法

动规基础:最长递增子序列的三种解法。附详解和代码。第一种:转化成LCS问题求解O(n*n)。第二种:设d[i]为以第i个元素结尾的最长递增子序列的长度O(n*n)。第三种:二分查找优化O(nlogn)...
  • u012198382
  • u012198382
  • 2014年05月04日 21:20
  • 3184

最长递增子序列LIS的O(nlogn)的求法

最长递增子序列(Longest Increasing Subsequence)是指n个数的序列的最长单调递增子序列。比如,A = [1,3,6,7,9,4,10,5,6]的LIS是1 3 6 7 9 ...
  • u012505432
  • u012505432
  • 2016年08月17日 10:57
  • 496

NYOJ - 单调递增最长子序列(经典dp)

单调递增最长子序列 时间限制:3000 ms  |           内存限制:65535 KB 难度:4 描述 求一个字符串的最长递增子序列的长度 如:dabdbf最长递增子序列就...
  • SevenMIT
  • SevenMIT
  • 2013年04月12日 00:53
  • 2465

最长单调递增子序列 poj 2544 || HDU 3998

单调子序列包含有单调递增子序列和递减子序列,不失一般性,这里只讨论单调递增子序列。首先,从定义上明确我们的问题。给定序列a1, a2, …, an,如果存在满足下列条件的子序列 ai1i2im, (...
  • waitfor_
  • waitfor_
  • 2012年02月06日 13:42
  • 1998

动态规划--最长单调递增子序列

问题:找出一个n个数的序列X中最长的单调递增子序列。 分析1: 这里描述一个O(n^2)的算法,令c[i]表示:在a[0->i]中,当以a[i]为单调递增子序列最后一个元素时,所得最长单调递增子序...
  • wenlei_zhouwl
  • wenlei_zhouwl
  • 2010年11月05日 21:14
  • 11394

单调递增最长子序列 O(nlogn)

单调递增最长子序列 时间限制:3000 ms  |  内存限制:65535 KB 难度:4 描述求一个字符串的最长递增子序列的长度 如:dabdbf最长递增子序列就是abdf,长度为4 ...
  • u011455899
  • u011455899
  • 2014年02月15日 12:24
  • 721

NYOJ17 单调递增最长子序列 【二分法】+【动态规划】

单调递增最长子序列 时间限制:3000 ms  |  内存限制:65535 KB 难度:4 描述求一个字符串的最长递增子序列的长度 如:dabdbf最长递增子序列就是abdf,长度为4 ...
  • u012846486
  • u012846486
  • 2014年04月23日 17:53
  • 1463

DP介绍-最长递增子序列

最长递增子序列系列是DP动态规划中简单、经典的入门题目。类似最长非递减子序列、导弹拦截问题、最长公共子序列问题等等。这在我们逐渐了解、认知动态规划的过程中可以给我们提高很大的帮助。 设有由n...
  • peihaozhu
  • peihaozhu
  • 2016年04月23日 21:37
  • 682

最长单调递增子序列O(nlogn)

#include "iostream" #include "fstream" using namespace std;/* b[k]表示长度为i的子序列c[i]中,长度为k的最长单调递增子序列的最小结...
  • u012319493
  • u012319493
  • 2015年11月17日 14:39
  • 305
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:最长单调递增子序列
举报原因:
原因补充:

(最多只允许输入30个字)