的LIS是1 2 4 6,这时候下一个数是3,那么我们就要更新成1 2 3 6,让前面的数尽可能的小,这样就是为了能让后面的数有更多的机会被加入。
因为数字只有10个,我们可以状态压缩,记录每个数字是否出现在当前的LIS中。 dp[i][j][k]:位数为i 当前LIS的状态为j 要求的上升子序列的长度为k。 枚举当前位是什么来进行转移,注意考虑前导0和是否有上界标记。 k不是LIS的长度,一个状态的LIS长度是一定的,但对于要求的不同的LIS长度,一个状态得到的结果是不同的,所以k为要求的上升子序列的长度。
代码:
#include
#include
#include
#include
#include
#include
#include