码迷,mamicode.com
首页 > 其他好文 > 详细

动态规划(分割整数)---按平方数分割整数

时间:2019-07-02 10:56:10      阅读:158      评论:0      收藏:0      [点我收藏+]

标签:无法   最长递增子序列   解方程   增加   规划   长度   最小   整数   分割   

最长递增子序列

??已知一个序列 {S1, S2,...,Sn},取出若干数组成新的序列 {Si1, Si2,..., Sim},其中 i1、i2 ... im 保持递增,即新序列中各个数仍然保持原数列中的先后顺序,称新序列为原序列的一个 子序列

??如果在子序列中,当下标 ix > iy 时,Six > Siy,称子序列为原序列的一个 递增子序列

??定义一个数组 dp 存储最长递增子序列的长度,dp[n] 表示以 Sn 结尾的序列的最长递增子序列长度。对于一个递增子序列 {Si1, Si2,...,Sim},如果 im < n 并且 Sim < Sn,此时 {Si1, Si2,..., Sim, Sn} 为一个递增子序列,递增子序列的长度增加 1。满足上述条件的递增子序列中,长度最长的那个递增子序列就是要找的,在长度最长的递增子序列上加上 Sn 就构成了以 Sn 为结尾的最长递增子序列。因此 dp[n] = max{ dp[i]+1 | Si < Sn && i < n} 。

??因为在求 dp[n] 时可能无法找到一个满足条件的递增子序列,此时 {Sn} 就构成了递增子序列,需要对前面的求解方程做修改,令 dp[n] 最小为 1,即:

??dp[n]=max{1,dp[i]+1|Si<Sn&&i<n}

??对于一个长度为N的序列,最长递增子序列不一定会以Sn为结尾,因此dp[N]不是序列的最长递增子序列的长度,需要遍历dp数组找出最大值才是所要的结果。

动态规划(分割整数)---按平方数分割整数

标签:无法   最长递增子序列   解方程   增加   规划   长度   最小   整数   分割   

原文地址:https://www.cnblogs.com/yjxyy/p/11118981.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!