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 + 剪枝 以坐标轴的每个起点为出发点进行递归,
在坐标轴范围内以不同行走方向不断遍历行走,直到最后一次看时间之后