[算法-动态规划]求可跳转情况下的最小路径

本文介绍如何使用动态规划解决矩阵中从任意位置到达指定位置的最短路径问题,考虑有限次数的跳跃操作。通过字典和三维数组实现,并提供速度优化和内存节省策略。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Description

在这里插入图片描述
在这里插入图片描述

简单来说,我们给定了一个XY大小的矩阵,每个entry上都是一些非负数,我们同时也给定了一组跃迁数,但是我们必须按顺序使用他们,当然也可以不用,我们想通过这些跃迁数找到到(X-1,Y-1)的最短路径

input

在这里插入图片描述

output

在这里插入图片描述

sample input and output

6 4
1 0 3 7 2 5
8 3 7 6 9 8
9 7 8 2 1 1
3 2 9 1 7 8
1 1
16
# fly right, fly right, jump right, jump up, fly right, fly up, for a total of 1+0+3+2+1+1+8=16

思路

我们使用动态规划的思想,首先我们到了一个点有四个选择,往右跳,往右走,往下走,往下跳。首先我们先从第一个jump开始,我们可以选择跳与不跳,这样就可以将所有不用跳的到(i,j)最短距离和一部分只用一次跳的距离更新(不一定是最优的,可能会在下个循环里中的往右走或往下走更新)
我们使用字典来实现,里面的key(i,j,s)表示到(i,j)并且利用s次跃迁的最小值。初始化的时候将输入的矩阵的左上角存入。并且使用exception来防止某些不可能出现的(i,j,s)
最后,我们对(X-1,Y-1,s)进行遍历,选取其中的最小值并且将它return

速度优化

当我们在某次更新(i,j)是没有用到jump时,那么按照规定,这之后的jump我们也没办法使用,所以这时候我们可以直接break,这样会缩短差不多2/3的时间

内存优化

对于不会出现的key选择不添加入字典(使用exception)

实现(使用字典)


if __name__ == '__main__':
    width, height = map(int, input().split())
    input_matrix = [[0 for i in range(width)]for j in range(height)]
    for i in range(height):
        input_matrix[i] = list(map(int, input().split()))
    jumps = list(map(int, input().split()))
    #jumps.insert(0, 0)
    jumps.append(0)
    len_jump = len(jumps)
    for i in range(len_jump):
        if jumps[i]>=width-1 & jumps[i]>= height-1:
            jumps = jumps[0:i]
    len_jump = len(jumps)
    dp = dict()
    dp[(0,0,0)] = input_matrix[0][0]
    det_row = 0 # if i + det_row > width not need to jump anymore 0 can jump
    det_col = 0 # 0 can jump, 1 can't jump
    det = 0
    det_break_jump = 0
    det_jump = 1
    mini = -1
    det_mini = 0
    for s in range(len_jump):
        det_row = 0
        if s==1:
            mini = dp[(height-1,width-1,0)]
            det_mini = 1
        if s>1:
            mini = min(mini,dp[height-1,width-1,s-1])
        #else:
            #mini = min(mini, dp[(i,j,s-1)])
        #else:

        if (det_jump == 0):
            break
        det_jump = 0
        for i in range(height):
            det_col = 0
            if i + jumps[s] + 1 > height - 1: # can't jump row for now
                det_row = 1
            for j in range(width):
                if j + jumps[s] + 1 > width - 1: # col can't jump for now
                    det_col = 1
                try:
                    dp[(i, j, s)] == -2
                except:
                    det = 1
                else:
                    if det_col == 1: # col can't jump
                        if det_row == 0: # row can jump
                            if j == width - 1: # col can't walk
                                # if i < height - jumps[s] - 1: # can jump
                                try:
                                    dp[(i+1,j,s)] == -2
                                except:
                                    dp[(i+1,j,s)] = dp[(i,j,s)] + input_matrix[i+1][j]
                                else:
                                    dp[(i+1,j,s)] = min(dp[(i+1,j,s)],dp[(i,j,s)] + input_matrix[i+1][j])
                                try:
                                    dp[(i+jumps[s]+1,j,s+1)] == -2
                                except:
                                    dp[(i + jumps[s] + 1, j, s + 1)] = dp[(i, j, s)] + input_matrix[i + jumps[s] + 1][j]
                                    det_jump = 1
                                else:
                                    if dp[(i+jumps[s]+1,j,s+1)] >= dp[(i,j,s)] + input_matrix[i+jumps[s]+1][j]:
                                        dp[(i+jumps[s]+1,j,s+1)] = dp[(i,j,s)] + input_matrix[i+jumps[s]+1][j]
                                        det_jump = 1
                            else: # col can walk
                                try:
                                    dp[(i+1,j,s)] == -2
                                except:
                                    dp[(i+1,j,s)] = dp[(i,j,s)] + input_matrix[i+1][j]
                                else:
                                    dp[(i+1,j,s)] = min(dp[(i+1,j,s)],dp[(i,j,s)] + input_matrix[i+1][j])
                                try:
                                    dp[(i,j+1,s)] == -2
                                except:
                                    dp[(i,j+1,s)] = dp[(i,j,s)] + input_matrix[i][j+1]
                                else:
                                    dp[(i,j+1,s)] = min(dp[(i,j+1,s)],dp[(i,j,s)] + input_matrix[i][j+1])
                                try:
                                    dp[(i+jumps[s]+1,j,s+1)] == -2
                                except:
                                    dp[(i + jumps[s] + 1, j, s + 1)] = dp[(i, j, s)] + input_matrix[i + jumps[s] + 1][j]
                                    det_jump = 1
                                else:
                                    if dp[(i+jumps[s]+1,j,s+1)] >= dp[(i,j,s)] + input_matrix[i+jumps[s]+1][j]:
                                        dp[(i+jumps[s]+1,j,s+1)] = dp[(i,j,s)] + input_matrix[i+jumps[s]+1][j]
                                        det_jump = 1
                        else: # det_row = 1 row can't jump
                            if j == width - 1: # col can't walk
                                if i != height - 1: # row can walk
                                    try:
                                        dp[(i+1,j,s)] == -2
                                    except:
                                        dp[(i+1,j,s)] = dp[(i,j,s)] + input_matrix[i+1][j]
                                    else:
                                        dp[(i+1,j,s)] = min(dp[(i+1,j,s)],dp[(i,j,s)] + input_matrix[i+1][j])
                            else: # col can walk
                                if i != height - 1: # row can walk
                                    try:
                                        dp[(i+1,j,s)] == -2
                                    except:
                                        dp[(i+1,j,s)] = dp[(i,j,s)] + input_matrix[i+1][j]
                                    else:
                                        dp[(i+1,j,s)] = min(dp[(i+1,j,s)],dp[(i,j,s)] + input_matrix[i+1][j])
                                    try:
                                        dp[(i, j + 1, s)] == -2
                                    except:
                                        dp[(i, j + 1, s)] = dp[(i, j, s)] + input_matrix[i][j + 1]
                                    else:
                                        dp[(i, j + 1, s)] = min(dp[(i, j + 1, s)],
                                                                dp[(i, j, s)] + input_matrix[i][j + 1])
                                else: # row can't walk

                                    try:
                                        dp[(i,j+1,s)] == -2
                                    except:
                                        dp[(i,j+1,s)] = dp[(i,j,s)] + input_matrix[i][j+1]
                                    else:
                                        dp[(i,j+1,s)] = min(dp[(i,j+1,s)],dp[(i,j,s)] + input_matrix[i][j+1])

                    else: # det_col = 0, col can jump
                        if det_row == 0:# row can jump
                            try:
                                dp[(i + 1, j, s)] == -2
                            except:
                                dp[(i + 1, j, s)] = dp[(i, j, s)] + input_matrix[i + 1][j]
                            else:
                                dp[(i + 1, j, s)] = min(dp[(i + 1, j, s)], dp[(i, j, s)] + input_matrix[i + 1][j])
                            try:
                                dp[(i, j + 1, s)] == -2
                            except:
                                dp[(i, j + 1, s)] = dp[(i, j, s)] + input_matrix[i][j + 1]
                            else:
                                dp[(i, j + 1, s)] = min(dp[(i, j + 1, s)], dp[(i, j, s)] + input_matrix[i][j + 1])
                            try:
                                dp[(i + jumps[s] + 1, j, s + 1)] == -2
                            except:
                                dp[(i + jumps[s] + 1, j, s + 1)] = dp[(i, j, s)] + input_matrix[i + jumps[s] + 1][j]
                                det_jump = 1
                            else:
                                if dp[(i + jumps[s] + 1,j,s+1)] >= dp[(i, j, s)] + input_matrix[i + jumps[s] + 1][j]:
                                    dp[(i + jumps[s] + 1, j, s + 1)] = dp[(i, j, s)] + input_matrix[i + jumps[s] + 1][j]
                                    det_jump = 1
                            try:
                                dp[(i, j + jumps[s] + 1, s + 1)] == -2
                            except:
                                dp[(i, j + jumps[s] + 1, s + 1)] = dp[(i, j, s)] + input_matrix[i][j+ jumps[s] + 1]
                                det_jump = 1
                            else:
                                if dp[(i, j + jumps[s] + 1, s + 1)] >= dp[(i, j, s)] + input_matrix[i][j + jumps[s] + 1]:
                                    dp[(i, j + jumps[s] + 1, s + 1)] = dp[(i, j, s)] + input_matrix[i][j + jumps[s] + 1]
                                    det_jump = 1
                        else: # det_row = 1  row can't jump
                            if i == height - 1:  # row can't walk
                                try:
                                    dp[(i, j + 1, s)] == -2
                                except:
                                    dp[(i, j + 1, s)] = dp[(i, j, s)] + input_matrix[i][j + 1]
                                else:
                                    dp[(i, j + 1, s)] = min(dp[(i, j + 1, s)], dp[(i, j, s)] + input_matrix[i][j + 1])

                                try:
                                    dp[(i, j + jumps[s] + 1, s + 1)] == -2
                                except:
                                    dp[(i, j + jumps[s] + 1, s + 1)] = dp[(i, j, s)] + input_matrix[i][j + jumps[s] + 1]
                                    det_jump = 1
                                else:
                                    if dp[(i, j + jumps[s] + 1, s + 1)] >= dp[(i, j, s)] + input_matrix[i][j + jumps[s] + 1]:
                                        dp[(i, j + jumps[s] + 1, s + 1)] = dp[(i, j, s)] + input_matrix[i][j + jumps[s] + 1]
                                        det_jump = 1
                            else:  # row can walk
                                try:
                                    dp[(i + 1, j, s)] == -2
                                except:
                                    dp[(i + 1, j, s)] = dp[(i, j, s)] + input_matrix[i + 1][j]
                                else:
                                    dp[(i + 1, j, s)] = min(dp[(i + 1, j, s)], dp[(i, j, s)] + input_matrix[i + 1][j])

                                try:
                                    dp[(i, j + 1, s)] == -2
                                except:
                                    dp[(i, j + 1, s)] = dp[(i, j, s)] + input_matrix[i][j + 1]
                                else:
                                    dp[(i, j + 1, s)] = min(dp[(i, j + 1, s)], dp[(i, j, s)] + input_matrix[i][j + 1])

                                try:
                                    dp[(i, j + jumps[s] + 1, s + 1)] == -2
                                except:
                                    dp[(i, j + jumps[s] + 1, s + 1)] = dp[(i, j, s)] + input_matrix[i][j+ jumps[s] + 1]
                                    det_jump = 1
                                else:
                                    if dp[(i, j + jumps[s] + 1, s + 1)] >= dp[(i, j, s)] + input_matrix[i][j + jumps[s] + 1]:
                                        dp[(i, j + jumps[s] + 1, s + 1)] = dp[(i, j, s)] + input_matrix[i][j + jumps[s] + 1]
                                        det_jump = 1

    # renew near element
    #for i in range(height):
    #    for j in range(width):

    mini = dp[(height-1,width-1,0)]
    for i in range(len_jump ):
        try:
            if mini > dp[(height-1,width-1,i)]:
                mini = dp[(height-1,width-1,i)]
        except:
            det = 0
    print(mini)

实现(使用三维数组)

import copy
if __name__ == '__main__':
    width, height = map(int, input().split())
    input_matrix = [[-1 for i in range(width)]for j in range(height)]
    for i in range(height):
        input_matrix[i] = list(map(int, input().split()))
    jumps = list(map(int, input().split()))
    #jumps.insert(0, 0)
    jumps.append(0)
    len_jump = len(jumps)
    for i in range(len_jump):
        if jumps[i]>=width-1 & jumps[i]>= height-1:
            jumps = jumps[0:i]
    len_jump = len(jumps)
    dp_plus = []
    for k in range(len_jump):
        dp_plus.append([])
        for j in range(height):
            dp_plus[k].append([])
            for i in range(width):
                dp_plus[k][j].append(-1)
    #dp_plus = [[[0 for i in range(width)]for j in range(height)]for k in range(len_jump)]
    #for i in range(height):
    #    input_matrix_buffer = copy.deepcopy(input_matrix[i])
    #   dp_plus[0][i] = input_matrix_buffer
    #dp = dict()
    #dp[(0,0,0)] = input_matrix[0][0]
    dp_plus[0][0][0] = input_matrix[0][0]
    det_row = 0 # if i + det_row > width not need to jump anymore 0 can jump
    det_col = 0 # 0 can jump, 1 can't jump
    det = 0
    det_break_jump = 0
    det_jump = 1
    for s in range(len_jump):
        det_row = 0
        if (det_jump == 0 ):
            break
        det_jump = 0
        for i in range(height):
            det_col = 0
            if i + jumps[s] + 1 > height - 1: # can't jump row for now
                det_row = 1
            for j in range(width):
                if j + jumps[s] + 1 > width - 1: # col can't jump for now
                    det_col = 1
                if dp_plus[s][i][j] != -1:
                    if det_col == 1: # col can't jump
                        if det_row == 0: # row can jump
                            if j == width - 1: # col can't walk
                                # if i < height - jumps[s] - 1: # can jump
                                if dp_plus[s][i+1][j] == -1:
                                    dp_plus[s][i+1][j] = dp_plus[s][i][j] + input_matrix[i+1][j]
                                    #dp[(i+1,j,s)] = dp[(i,j,s)] + input_matrix[i+1][j]
                                else:
                                    dp_plus[s][i + 1][j] = min(dp_plus[s][i+1][j],dp_plus[s][i][j]+input_matrix[i+1][j])
                                    #dp[(i+1,j,s)] = min(dp[(i+1,j,s)],dp[(i,j,s)] + input_matrix[i+1][j])
                                if s!= len_jump-1:
                                    if dp_plus[s+1][i+jumps[s]+1][j] == -1:
                                        dp_plus[s + 1][i + jumps[s] + 1][j] = dp_plus[s][i][j] + input_matrix[i + jumps[s] + 1][j]
                                        #dp[(i+jumps[s]+1,j,s+1)] == -2
                                        det_jump = 1
                                    else:
                                        if dp_plus[s+1][i+jumps[s]+1][j] >= dp_plus[s][i][j] + input_matrix[i + jumps[s] + 1][j]:
                                            dp_plus[s + 1][i + jumps[s] + 1][j] = dp_plus[s][i][j] + input_matrix[i + jumps[s] + 1][j]
                                            det_jump = 1
                            else: # col can walk
                                if dp_plus[s][i+1][j] == -1:
                                    dp_plus[s][i + 1][j] = dp_plus[s][i][j] + input_matrix[i + 1][j]
                                    #dp[(i+1,j,s)] == -2
                                #except:
                                    #dp[(i+1,j,s)] = dp[(i,j,s)] + input_matrix[i+1][j]
                                else:
                                    dp_plus[s][i+1][j] = min(dp_plus[s][i+1][j],dp_plus[s][i][j] + input_matrix[i + 1][j])
                                #try:
                                    #dp[(i,j+1,s)] == -2
                                if dp_plus[s][i][j+1] == -1:
                                    dp_plus[s][i][j+1] = dp_plus[s][i][j] + input_matrix[i][j+1]
                                #except:
                                    #dp[(i,j+1,s)] = dp[(i,j,s)] + input_matrix[i][j+1]
                                else:
                                    #dp[(i,j+1,s)] = min(dp[(i,j+1,s)],dp[(i,j,s)] + input_matrix[i][j+1])
                                    dp_plus[s][i][j + 1] = min(dp_plus[s][i][j+1],dp_plus[s][i][j] + input_matrix[i][j+1])
                                #try:
                                    #dp[(i+jumps[s]+1,j,s+1)] == -2
                                if s != len_jump - 1:
                                    if dp_plus[s+1][i+jumps[s]+1][j] == -1:
                                        dp_plus[s + 1][i + jumps[s] + 1][j] = dp_plus[s][i][j] + input_matrix[i + jumps[s] + 1][j]

                                        #except:
                                        #dp[(i + jumps[s] + 1, j, s + 1)] = dp[(i, j, s)] + input_matrix[i + jumps[s] + 1][j]
                                        det_jump = 1
                                    else:
                                        if dp_plus[s + 1][i + jumps[s] + 1][j] >= dp_plus[s][i][j] + input_matrix[i + jumps[s] + 1][j]:
                                            dp_plus[s + 1][i + jumps[s] + 1][j] = min(dp_plus[s + 1][i + jumps[s] + 1][j],dp_plus[s][i][j] + input_matrix[i + jumps[s] + 1][j])
                                            det_jump = 1
                        else: # det_row = 1 row can't jump
                            if j == width - 1: # col can't walk
                                if i != height - 1: # row can walk
                                    if dp_plus[s][i+1][j] == -1:
                                        dp_plus[s][i + 1][j] = dp_plus[s][i][j] + input_matrix[i+1][j]
                                    else:
                                        dp_plus[s][i+1][j] = min(dp_plus[s][i+1][j],dp_plus[s][i][j] + input_matrix[i+1][j])
                            else: # col can walk
                                if i != height - 1: # row can walk
                                    if dp_plus[s][i + 1][j] == -1:
                                        dp_plus[s][i + 1][j] = dp_plus[s][i][j] + input_matrix[i + 1][j]
                                    else:
                                        dp_plus[s][i + 1][j] = min(dp_plus[s][i + 1][j],
                                                                   dp_plus[s][i][j] + input_matrix[i + 1][j])
                                    if dp_plus[s][i][j + 1] == -1:
                                        dp_plus[s][i][j + 1] = dp_plus[s][i][j] + input_matrix[i][j + 1]
                                    # except:
                                    # dp[(i,j+1,s)] = dp[(i,j,s)] + input_matrix[i][j+1]
                                    else:
                                        # dp[(i,j+1,s)] = min(dp[(i,j+1,s)],dp[(i,j,s)] + input_matrix[i][j+1])
                                        dp_plus[s][i][j + 1] = min(dp_plus[s][i][j + 1],
                                                                   dp_plus[s][i][j] + input_matrix[i][j + 1])
                                else: # row can't walk

                                    if dp_plus[s][i][j + 1] == -1:
                                        dp_plus[s][i][j + 1] = dp_plus[s][i][j] + input_matrix[i][j + 1]
                                    # except:
                                    # dp[(i,j+1,s)] = dp[(i,j,s)] + input_matrix[i][j+1]
                                    else:
                                        # dp[(i,j+1,s)] = min(dp[(i,j+1,s)],dp[(i,j,s)] + input_matrix[i][j+1])
                                        dp_plus[s][i][j + 1] = min(dp_plus[s][i][j + 1],
                                                                   dp_plus[s][i][j] + input_matrix[i][j + 1])

                    else: # det_col = 0, col can jump
                        if det_row == 0:# row can jump
                            if dp_plus[s][i + 1][j] == -1:
                                dp_plus[s][i + 1][j] = dp_plus[s][i][j] + input_matrix[i + 1][j]
                            else:
                                dp_plus[s][i + 1][j] = min(dp_plus[s][i + 1][j],
                                                           dp_plus[s][i][j] + input_matrix[i + 1][j])
                            if dp_plus[s][i][j + 1] == -1:
                                dp_plus[s][i][j + 1] = dp_plus[s][i][j] + input_matrix[i][j + 1]
                            # except:
                            # dp[(i,j+1,s)] = dp[(i,j,s)] + input_matrix[i][j+1]
                            else:
                                # dp[(i,j+1,s)] = min(dp[(i,j+1,s)],dp[(i,j,s)] + input_matrix[i][j+1])
                                dp_plus[s][i][j + 1] = min(dp_plus[s][i][j + 1],
                                                           dp_plus[s][i][j] + input_matrix[i][j + 1])
                            if s != len_jump - 1:
                                if dp_plus[s + 1][i + jumps[s] + 1][j] == -1:
                                    dp_plus[s + 1][i + jumps[s] + 1][j] = dp_plus[s][i][j] + input_matrix[i + jumps[s] + 1][
                                        j]

                                    # except:
                                    # dp[(i + jumps[s] + 1, j, s + 1)] = dp[(i, j, s)] + input_matrix[i + jumps[s] + 1][j]
                                    det_jump = 1
                                else:
                                    if dp_plus[s + 1][i + jumps[s] + 1][j] >= dp_plus[s][i][j] + \
                                            input_matrix[i + jumps[s] + 1][j]:
                                        dp_plus[s + 1][i + jumps[s] + 1][j] = min(dp_plus[s + 1][i + jumps[s] + 1][j],
                                                                                  dp_plus[s][i][j] +
                                                                                  input_matrix[i + jumps[s] + 1][j])
                                        det_jump = 1
                            #try:
                                #dp[(i, j + jumps[s] + 1, s + 1)] == -2
                                if dp_plus[s+1][i][j+jumps[s]+1] == -1:
                                #except:
                                    #dp[(i, j + jumps[s] + 1, s + 1)] = dp[(i, j, s)] + input_matrix[i][j+ jumps[s] + 1]
                                    dp_plus[s + 1][i][j + jumps[s] + 1] = dp_plus[s][i][j] + input_matrix[i][j + jumps[s] + 1]
                                    det_jump = 1
                                else:
                                    if dp_plus[s + 1][i][j + jumps[s] + 1] >= dp_plus[s][i][j] + input_matrix[i][j + jumps[s] + 1]:
                                        dp_plus[s + 1][i][j + jumps[s] + 1] = dp_plus[s][i][j] + input_matrix[i][j + jumps[s] + 1]
                                        det_jump = 1
                        else: # det_row = 1  row can't jump
                            if i == height - 1:  # row can't walk
                                if dp_plus[s][i][j + 1] == -1:
                                    dp_plus[s][i][j + 1] = dp_plus[s][i][j] + input_matrix[i][j + 1]
                                # except:
                                # dp[(i,j+1,s)] = dp[(i,j,s)] + input_matrix[i][j+1]
                                else:
                                    # dp[(i,j+1,s)] = min(dp[(i,j+1,s)],dp[(i,j,s)] + input_matrix[i][j+1])
                                    dp_plus[s][i][j + 1] = min(dp_plus[s][i][j + 1],
                                                               dp_plus[s][i][j] + input_matrix[i][j + 1])
                                if s != len_jump - 1:
                                    if dp_plus[s + 1][i][j + jumps[s] + 1] == -1:
                                        # except:
                                        # dp[(i, j + jumps[s] + 1, s + 1)] = dp[(i, j, s)] + input_matrix[i][j+ jumps[s] + 1]
                                        dp_plus[s + 1][i][j + jumps[s] + 1] = dp_plus[s][i][j] + input_matrix[i][
                                            j + jumps[s] + 1]
                                        det_jump = 1
                                    else:
                                        if dp_plus[s + 1][i][j + jumps[s] + 1] >= dp_plus[s][i][j] + input_matrix[i][
                                            j + jumps[s] + 1]:
                                            dp_plus[s + 1][i][j + jumps[s] + 1] = dp_plus[s][i][j] + input_matrix[i][
                                                j + jumps[s] + 1]
                                            det_jump = 1
                            else:  # row can walk
                                if dp_plus[s][i + 1][j] == -1:
                                    dp_plus[s][i + 1][j] = dp_plus[s][i][j] + input_matrix[i + 1][j]
                                else:
                                    dp_plus[s][i + 1][j] = min(dp_plus[s][i + 1][j],
                                                               dp_plus[s][i][j] + input_matrix[i + 1][j])

                                if dp_plus[s][i][j + 1] == -1:
                                    dp_plus[s][i][j + 1] = dp_plus[s][i][j] + input_matrix[i][j + 1]
                                # except:
                                # dp[(i,j+1,s)] = dp[(i,j,s)] + input_matrix[i][j+1]
                                else:
                                    # dp[(i,j+1,s)] = min(dp[(i,j+1,s)],dp[(i,j,s)] + input_matrix[i][j+1])
                                    dp_plus[s][i][j + 1] = min(dp_plus[s][i][j + 1],
                                                               dp_plus[s][i][j] + input_matrix[i][j + 1])
                                if s != len_jump - 1:
                                    if dp_plus[s + 1][i][j + jumps[s] + 1] == -1:
                                        # except:
                                        # dp[(i, j + jumps[s] + 1, s + 1)] = dp[(i, j, s)] + input_matrix[i][j+ jumps[s] + 1]
                                        dp_plus[s + 1][i][j + jumps[s] + 1] = dp_plus[s][i][j] + input_matrix[i][
                                            j + jumps[s] + 1]
                                        det_jump = 1
                                    else:
                                        if dp_plus[s + 1][i][j + jumps[s] + 1] >= dp_plus[s][i][j] + input_matrix[i][
                                            j + jumps[s] + 1]:
                                            dp_plus[s + 1][i][j + jumps[s] + 1] = dp_plus[s][i][j] + input_matrix[i][
                                                j + jumps[s] + 1]
                                            det_jump = 1

    # renew near element
    #for i in range(height):
    #    for j in range(width):

    mini = dp_plus[0][height-1][width-1]
    for i in range(len_jump):
        if dp_plus[i][height-1][width-1] != -1:
            if mini > dp_plus[i][height-1][width-1]:
                mini = dp_plus[i][height-1][width-1]
    print(mini)

sample dictionary

对于sample,最后我们会得到这样的一个dict

{(0, 0, 0): 1, (1, 0, 0): 9, (0, 1, 0): 1, (2, 0, 1): 10, (0, 2, 1): 4, (1, 1, 0): 4, (0, 2, 0): 4, (2, 1, 1): 8, (0, 3, 1): 8, (1, 2, 0): 11, (0, 3, 0): 11, (2, 2, 1): 12, (0, 4, 1): 6, (1, 3, 0): 17, (0, 4, 0): 13, (2, 3, 1): 12, (0, 5, 1): 11, (1, 4, 0): 22, (0, 5, 0): 18, (2, 4, 1): 13, (1, 5, 0): 26, (2, 5, 1): 14, (2, 0, 0): 18, (3, 0, 1): 12, (1, 2, 1): 11, (2, 1, 0): 11, (3, 1, 1): 6, (1, 3, 1): 10, (2, 2, 0): 19, (3, 2, 1): 15, (1, 4, 1): 15, (2, 3, 0): 19, (3, 3, 1): 13, (1, 5, 1): 19, (2, 4, 0): 20, (3, 4, 1): 20, (2, 5, 0): 21, (3, 5, 1): 22, (3, 0, 0): 21, (3, 1, 0): 13, (3, 2, 0): 22, (3, 3, 0): 20, (3, 4, 0): 27, (3, 5, 0): 29, (2, 2, 2): 12, (0, 4, 2): 6, (2, 3, 2): 10, (0, 5, 2): 11, (2, 4, 2): 7, (2, 5, 2): 8, (3, 2, 2): 20, (1, 4, 2): 15, (3, 3, 2): 7, (1, 5, 2): 18, (3, 4, 2): 14, (3, 5, 2): 16, (1, 4, 3): 15, (0, 5, 3): 11, (1, 5, 3): 19, (2, 4, 3): 11, (2, 5, 3): 8, (3, 2, 3): 21, (2, 3, 3): 14, (3, 3, 3): 11, (3, 4, 3): 14, (3, 5, 3): 16}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值