📅  最后修改于: 2023-12-03 15:42:21.689000             🧑  作者: Mango
给定一个长度为N的整数数列,请你选择其中的若干数,使得这些数中任意相邻两个数字的差的绝对值恰好为1,并且选出的数字个数最多。输出可选数字的个数。
第一行包含整数N。
第二行包含N个整数,表示完整序列。
输出一个整数,表示可选数字的个数。
1≤N≤1000,序列中的数的绝对值不超过10000。
输入样例:
7
2 6 4 5 7 3 2
输出样例:
5
这道题的解题思路是使用动态规划。其中将状态设计成f[i]表示序列前i个数,以第i个数为结尾所选数字的个数的最大值。转移方程如下:
注意最后的结果是max(f[1],f[2],...,f[n]),因为最后一个数不一定是最后的max。
def main():
N = int(input())
nums = list(map(int, input().strip().split()))
f = [0] * N
for i in range(N):
f[i] = 1
for j in range(i):
if abs(nums[j]-nums[i]) == 1:
f[i] = max(f[i], f[j]+1)
print(max(f))
时间复杂度:O(N^2)