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

相关推荐

牛客网
牛客企业服务