spencerqiu
V2EX  ›  问与答

最长非降子序列问题的动态转移方程没看懂

  •  
  •   spencerqiu · Oct 26, 2014 via iPad · 3190 views
    This topic created in 4221 days ago, the information mentioned may be changed or developed.


    这边 f(i) 直接就等于之前所有结果中的最大结果 +1 了,感觉怪怪的。

    比如第九次,加入的是 16 不能把它放进去,这个方程又是个什么意思呢?
    7 replies    2014-10-27 01:55:14 +08:00
    mousepotato
        1
    mousepotato  
       Oct 26, 2014 via iPhone
    请问lz这本书名,多谢!
    spencerqiu
        2
    spencerqiu  
    OP
       Oct 26, 2014 via iPad
    @mousepotato
    高中生用的教材,不是那种应付面试的哦。
    WDsUO7HnS2Na1DFC
        3
    WDsUO7HnS2Na1DFC  
       Oct 26, 2014   ❤️ 1
    这边 f(i) 直接就等于之前所有结果中的最大结果 +1 了,感觉怪怪的。
    这句话错的,有限定条件,应该是等于之前a[i] > (>=?) a[j]的最大结果+1
    应付面试的题目也可以提高算法的....
    windywinter
        4
    windywinter  
       Oct 26, 2014   ❤️ 1
    转移方程上少写了个条件
    WDsUO7HnS2Na1DFC
        5
    WDsUO7HnS2Na1DFC  
       Oct 26, 2014   ❤️ 1
    前面还有个max....其实就是判断加入第i个数后,能达到的最长长度,要么为f(i-1),要么为f(j)+1(i<j && a[i] > a[j])的最大值,哪个大就哪个
    llbbzh
        6
    llbbzh  
       Oct 27, 2014 via iPhone
    建议看看这个问题O(nlgn)的算法
    heliumhgy
        7
    heliumhgy  
       Oct 27, 2014   ❤️ 1
    @spencerqiu 其实说白了就是在一个数组f中第i个元素(f[i])中保存原序列a中前i个元素的最长非降子序列的长度,当扩展到第i+1个元素的时候,只需要在前i个元素中找到符合非降的元素j(符合条件a[j]<=a[i]),那么f[j]+1就是一个非降子序列的长度,就可以赋值给f[i+1],用max选出了最长的那个子序列的长度并存起来就好了,一直搜索下去,f[n]就是解了。。。用另外一个数组你还能知道这个最长的子序列到底是什么。。。
    如果看懂了就点个感谢还我金币!!!
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Solana   ·   896 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 38ms · UTC 22:31 · PVG 06:31 · LAX 15:31 · JFK 18:31
    ♥ Do have faith in what you're doing.