求最少的递减子序列个数及子序列
input:7,3,6,2,5,1
output:
2
7,3,2,1
6,5input:7,3,6,2,5,1
output:
2
7,6,5
3,2,1
# 解释:虽然3和6都比7小,但是7后面是最近的是3,构造递减子序列不能跳过3思路:dp
最后更新于
input:7,3,6,2,5,1
output:
2
7,3,2,1
6,5input:7,3,6,2,5,1
output:
2
7,6,5
3,2,1
# 解释:虽然3和6都比7小,但是7后面是最近的是3,构造递减子序列不能跳过3最后更新于
inputstr = "7,3,6,2,5,1,9" #某个用例
nums = [int(i) for i in inputstr.split(',')]
dp = [0 for i in range(len(nums))]
ans = 0
n = len(nums)
for i in range(n):
dp[i] = 1
for j in range(i):
if nums[j] <= nums[i]: #注意与求递增序列稍微不同,多了等号
dp[i] = max(dp[i], dp[j] + 1)
ans = max(dp[i], ans)
if ans == 0:
print(1)
else:
print(ans)
result = []
for i in range(1, max(dp)+1):
result.append([])
for j in range(len(dp)):
if dp[j] == i:
result[i-1].append(str(nums[j]))
for x in result:
print(','.join(x))