n,m = map(int,input().split()) nums = [] for i in range(m): nums.append(int(input())) class sol: def __init__(self): # self.seen = set() def dfs(self,nums,n,m,pos,step): # 停止条件:如果是最后一次看时间后走的 if step == m: if pos not in self.seen: self.seen.add(pos) return # 剪枝 保证始终在坐标轴范围递归 if 1 <= pos + nums[step] <= n: a = pos + nums[step] self.dfs(nums,n,m,a,step+1) if 1 <= pos - nums[step] <= n: b = pos - nums[step] self.dfs(nums,n,m,b,step+1) return def main(self): # 以坐标轴的每个起点为出发点进行递归 for pos in range(1,n+1): self.dfs(nums,n,m,pos,0) print(len(self.seen)) test = sol() test.main()
基本思想:DFS + 剪枝 以坐标轴的每个起点为出发点进行递归, 在坐标轴范围内以不同行走方向不断遍历行走,直到最后一次看时间之后