2 条题解
-
0
import heapq def main(): import sys input = sys.stdin.read data = input().split() idx = 0 N = int(data[idx]) idx += 1 M = int(data[idx]) idx += 1 m = list(map(int, data[idx:idx+M])) idx += M m = [0] + m # 1-based indexing for m[1..M] INF = float('inf') # d[u][i] is the minimal cost to reach node u with last operation i d = [[INF] * (M + int(1)) for _ in range(N + int(1))] # u:1..N, i:1..M heap = [] # Initialize: start at node 1, using any operation i (cost 0) for i in range(1, M + 1): d[1][i] = 0 heapq.heappush(heap, (0, 1, i)) while heap: dist, u, i = heapq.heappop(heap) if u == N: print(dist) return if dist > d[u][i]: continue # Try all operations j for j in range(1, M + 1): mj = m[j] v1 = u + mj v2 = u - mj vs = [] if 1 <= v1 <= N: vs.append(v1) if 1 <= v2 <= N: vs.append(v2) # Avoid duplicate v1 and v2 vs = list(set(vs)) for v in vs: new_cost = dist + abs(2 * mj) + abs(j - i) if new_cost < d[v][j]: d[v][j] = new_cost
- 1
信息
- ID
- 1473
- 时间
- 1000ms
- 内存
- 64MiB
- 难度
- 8
- 标签
- 递交数
- 115
- 已通过
- 18
- 上传者