广大�娴╋�疏浚�淇$���涓�蹇��诲����涓���锛����辩��娉�锛����卞��涔�锛�涓���娉ヤ����ョ�绋�浠g��锛��村��娆㈢�ㄨ交�炬�瑰�����棰�绠�����杩股�甯�����娆㈢��广大�浼�浼村��浠ュ�澶��虫敞锛�

�ㄦ��瑙���绯诲��涓�锛���妤兼�

1.1 姒�蹇佃�茶В

璁茶В�ㄦ��瑙�����璧���寰�澶�锛�疏浚��圭��疏浚�涔�������澶��舵�佃�绋�潘���涓轰�绯诲�����舵�甸��棰�锛��╃�ㄥ���舵�仪式��寸���崇郴锛���涓�姹�瑙c��姒�蹇典腑�����舵�仪式��寸���崇郴锛��跺������广大辨���舵��潘�绉绘�圭���寰�澶�河渠鸿�寰�DP�撅�涓���缁�绉板�ㄦ��瑙���涓�DP锛�锛��规����������涓�DP�哄��河渠�涓�河渠��哄��褰㈠���绠�娉�锛�姣�濡�DFS��河渠���娉���KMP锛�锛�娌℃��疏浚�����姝ラ�よ�疏浚�绗�涓�姝ョ��河渠�姝ユ�ュ��浠�涔�锛���浠ュ��纭���璇达�DP�跺����涓�绉�瑙e�抽��棰������炽��

杩�绉����崇����璐ㄦ��锛�涓�涓�瑙�妯℃��杈�澶х����棰�锛���浠ョ�ㄤ袱涓�涓����拌〃绀虹����棰�锛�锛���浠ラ��杩��ュ共瑙�妯¤�广大�����棰���缁����ュ��扮演��锛���甯镐�瀵绘��颁�河渠��规����璁$���昏�锛�濡�姹����肩��锛�

骞茶揣锛��捐В绠�娉������ㄦ��瑙���绯诲��

��浠ユ��浠�涓������扮演���舵��潘�绉绘�圭�锛��烘���芥��杩��凤�

opt 锛���浠g�规����璁$���昏�锛���甯镐负max or min��

i,j,k �芥���ㄥ��涔�DP�圭�涓��ㄥ�扮演�����般��

dp[i] = opt(dp[i-1])+1

dp[i][j] = w(i,j,k) + opt(dp[i-1][k])

dp[i][j] = opt(dp[i-1][j] + xi, dp[i][j-1] + yj, ...)

姣�涓�涓��舵��潘�绉绘�圭�锛�澶�广大��芥��涓�河渠�缁�寰���宸�����杩�涓��跺��寰�疏浚规����瑙o�涓��寸���崇郴澶�河渠��讳�锛�涓����芥�借薄�哄���ㄥ��浠ュ��ㄧ����寮�����浠ユ��涓�河渠哄�跺��涓�寤鸿���绘�昏�扮演‖����绉�绫诲�����舵��潘�绉绘�圭���浣���DP��棰�������广大卞���ㄦ��娉����★���娉�褰�绫昏�琛�������锛���璁や负涓��������ㄦ��绯诲��涓�锛���广大��辩���ユ繁涓哄ぇ疏浚惰�茶В�ㄦ��瑙���杩�涓�涓婚���

��浠�����涓�涓�����绠�����DP棰���锛�����DP��姒�蹇碉�

棰���锛���璁句�姝e�ㄧ��妤兼�����瑕� n �朵����藉�拌揪妤奸《��姣�娆′���浠ョ�� 1 �� 2 涓��伴�躲��浣���澶�广大�绉�涓������规���浠ョ���版ゼ椤跺��锛�娉ㄦ��锛�缁�疏浚� n ��涓�涓�姝f�存�般��

绀轰� 1锛�

杈��ワ�2杈��虎�2瑙i��锛���涓ょ��规���浠ョ���版ゼ椤躲��

  1. 1 �� + 1 ��

  2. 2 ��

绀轰� 2锛�

杈��ワ�3杈��虎�3瑙i��锛���涓�绉��规���浠ョ���版ゼ椤躲��

  1. 1 �� + 1 �� + 1 ��

  2. 1 �� + 2 ��

  3. 2 �� + 1 ��

1.2 棰����捐В

��杩�������浠���浠ユ��纭�锛�璇ラ���浠ヨ���瑙d负涓�河渠�������浼�海洋�缁�����海洋���棰�锛��冲������浼�瑙e��浠ヤ��跺����棰�����浼�瑙f�ユ�����版��寤恒��婊¤冻��广大�澶ч��棰���瑙d负�ュ共涓�瑙�妯¤�广大�����棰������′欢����浠ユ��浠�浠� dp[n] 琛ㄧず�藉�拌揪绗� n �剁���规��绘�起���浠ュ��板�涓��舵��潘�绉绘�圭�锛�

dp[n]=dp[n-1]+dp[n-2]

  • 涓� 1 �跺�伴�讹���1绉��瑰���
  • 涓� 2 �跺�伴�讹���1+1��2涓ょ��瑰���
  • 涓� 3 �跺�伴�讹��拌揪绗�3�剁���规��绘�板氨���扮演��1�跺��绗�2�剁���规��颁�����
  • 涓� n �跺�伴�讹��拌揪绗�n�剁���规��绘�板氨���扮演�� (n-1) �跺��绗� (n-2) �剁���规��颁�����
  • 骞茶揣锛��捐В绠�娉������ㄦ��瑙���绯诲��

    1.3 Go璇�瑷�绀轰�

    �规������锛�寰��颁唬��濡�涓�锛�

    func climbStairs(n int) int {
        if n == 1 {
            return 1
         }
         dp := make([]int, n+1)
         dp[1] = 1
         dp[2] = 2
         for i := 3; i <= n; i++ {
             dp[i] = dp[i-1] + dp[i-2]
        }
        return dp[n]
    }

    �ㄦ��瑙���绯诲��河渠�锛���澶у��搴���

    2.1 ��澶у��搴���

    棰���锛�缁�疏浚�涓�涓��存�版�扮演� nums 锛��惧�颁�涓��锋����澶у����杩�缁�海洋��扮演�锛�海洋��扮演���广大�����涓�涓���绱�锛�锛�杩����舵��澶у����

    绀轰� 锛�

    杈���: [-2,1,-3,4,-1,2,1,-5,4],

    杈���: 6

    瑙i��: 杩�缁�海洋��扮演� [4,-1,2,1] ������澶э�涓� 6��

    �垮�伴���璇蜂�瑕���涓��归�瑙o�����琛�����2-3����....

    2.2 棰����捐В

    兄弟�����浠�����棰���锛�涓�涓�杩�缁�海洋��扮演�涓�疏浚�瑕�浠ヤ�涓��颁�涓虹�广大撅��d���浠���浠ュ��舵��疏浚�涔���濡�涓�锛�

    dp[i]锛�琛ㄧず浠� nums[i] 缁�广大剧��杩�缁�海洋��扮演�����澶у����

    �d�涓轰�涔�杩�涔�疏浚�涔���锛���涓鸿��山��涔��跺������疏浚规���冲�扮演��锛��ㄤ�涓���涓���浠����起��舵��潘�绉绘�圭��跺������杩�1-3涓����扮演���圭��ユ��杩板�瑙�妯¢��棰���澶ц�妯¢��棰��寸���崇郴��

    褰��讹�濡���浣�娌℃���冲�起��跺��涔���甯告�e父锛���涓� "璇ラ��棰����╀� 1977 骞存���虎�浣����村�� 1984 骞存��琚����颁�绾挎�ф�堕�寸����浼�瑙f���"

    �规���舵����疏浚�涔�锛���浠�缁х图杩�琛�����锛�

    濡���瑕�寰���dp[i]锛��d�nums[i]涓�疏浚�浼�琚�������骞朵� dp[i] ��琛ㄧず��杩�缁�海洋�搴���涓� dp[i-1] ��琛ㄧず��杩�缁�海洋�搴���寰����藉氨宸�涓�涓� nums[i] ����

    dp[i] = dp[i-1]+nums[i] , if (dp[i-1] >= 0)

    浣���杩�����浠����颁�涓���棰�锛�寰�������dp[i-1]��韬���涓�涓�璐��般���h�绉����电��璇�锛�濡���dp[i]��杩�dp[i-1]+nums[i]�ユ�ㄥ�硷��d�缁����跺��������广大�河渠�锛���涓烘��浠�dp[i]瑕�姹�������澶у������浠ュ�ㄨ�绉����仪式�锛�濡���dp[i-1]<0锛��d�dp[i]�跺��广大辨��nums[i]���笺����

    dp[i] = nums[i] , if (dp[i-1] < 0)

    缁间�����锛���浠���浠ュ��起�

    dp[i]=max(nums[i], dp[i��1]+nums[i])

    寰��颁��舵��潘�绉绘�圭�锛�浣�����浠�杩���瑕���杩�涓�涓�宸叉�����舵����杩�琛��ㄥ�硷���浠���浠ユ�冲�� dp[0] 涓�疏浚���浠� nums[0] 杩�琛�缁�广大撅���浠�

    dp[0] = nums[0]

    �ㄥ�澶�棰���涓�锛���涓�dp[i]��韬�广大卞��涔���河渠�棰���涓�����棰�锛���浠�dp[i]��缁�广大辨��瑕���绛�妗���浣���杩����舵��涓���疏浚�涔�锛�骞朵���棰���涓�瑕�����棰�锛�涓��界�存�ヨ���������涓�涓��舵�� (杩�涓�姝ョ�甯告����海洋���浼���璺�澶�)����浠ユ��缁���绛�妗�锛��跺����浠���瀵绘�撅�

    max(dp[0], dp[1], ..., d[i-1], dp[i])

    ����疏浚�姣�锛���浠�缁��舵���撅�

    ��疏浚� nums 涓� [-2,1,-3,4,-1,2,1,-5,4]

    骞茶揣锛��捐В绠�娉������ㄦ��瑙���绯诲��

    2.3 Go璇�瑷�绀轰�

    �规������锛�寰��颁唬��濡�涓�锛�

    func maxSubArray(nums []int) int {
        if len(nums) < 1 {
            return 0
        }
        dp := make([]int, len(nums))
        //璁剧疆��彭����� 
        dp[0] = nums[0]
        for i := 1; i < len(nums); i++ {
            //澶��� dp[i-1] < 0 ������
            if dp[i-1] < 0 {
                dp[i] = nums[i]
            } else {
                dp[i] = dp[i-1] + nums[i]
            }
        }
        result := -1 << 31
        for _, k := range dp {
            result = max(result, k)
        }
        return result
    }
    
    func max(a, b int) int {
        if a > b {
            return a
        }
        return b
    }

    ��浠���浠ヨ�涓�姝ョ簿绠�浠g��涓猴�

    func maxSubArray(nums []int) int {
        if len(nums) < 1 {
            return 0
        }
        dp := make([]int, len(nums))
        result := nums[0]
        dp[0] = nums[0]
        for i := 1; i < len(nums); i++ {
            dp[i] = max(dp[i-1]+nums[i], nums[i])
            result = max(dp[i], result)
        }
        return result
    }
    
    func max(a, b int) int {
        if a > b {
            return a
        }
        return b
    }

    澶���搴�����锛��堕�村���搴�锛�O(N)��绌洪�村���搴�锛�O(N)��

    �ㄦ��瑙���绯诲��涓�锛����夸���海洋�搴���

    3.1 ���夸���海洋�搴���

    棰���锛�缁�疏浚�涓�涓���搴����存�版�扮演�锛��惧�板�朵腑���夸���海洋�搴������垮害��

    绀轰�:

    杈���: [10,9,2,5,3,7,101,18]

    杈���: 4

    瑙i��: ���跨��涓���海洋�搴����� [2,3,7,101]锛�疏浚����垮害�� 4��

    璇存��:���戒���澶�绉����夸���海洋�搴�����缁���锛�浣�����瑕�杈��哄�瑰����垮害�冲����

    ��棰���涓�疏浚��惧害锛�

    濡���娌℃����璺�璇峰��椤句�涓�绡���海洋�涔���疏浚癸�

    涓�寤鸿���存�ョ��棰�瑙o�

    3.2 棰����捐В

    兄弟�����浠�����棰���锛�瑕��剧�������夸���海洋�搴���锛�Longest Increasing Subsequence锛�LIS锛�����涓洪���涓�娌℃��瑕�姹�杩�缁�锛���浠�LIS���芥��杩�缁���锛�涔����芥����杩�缁��������讹�LIS绗�����浠ヤ��跺����棰�����浼�瑙f�ヨ�琛���寤虹���′欢����浠ユ��浠���浠ュ�璇��ㄥ�ㄦ��瑙����ヨ�琛�姹�瑙c��兄弟�����浠�疏浚�涔��舵��锛�

    dp[i] 锛�琛ㄧず浠�nums[i]缁�广大剧�����夸���海洋�搴������垮害

    ��浠���疏浚�nums涓�[1锛�9锛�5锛�9锛�3]

    骞茶揣锛��捐В绠�娉������ㄦ��瑙���绯诲��

    ��浠���涓ょ����佃�琛�璁ㄨ�虎�

  • 濡���nums[i]姣����㈢��������绱��藉�锛��d�dp[i]绛�河渠�1锛��冲����韬�锛�锛�璇ョ�璁烘�g‘锛�
  • 濡���nums[i]���㈠���ㄦ��浠�广大�����绱�nums[j]锛��d�dp[i]广大辩��河渠�dp[j]+1锛�璇ョ�璁洪��璇�锛�姣�濡�nums[3]>nums[0]锛���9>1,浣���dp[3]骞朵�绛�河渠�dp[0]+1锛�
  • ��浠�����姝ュ��轰��㈢��缁�璁猴�浣�����浠����颁�涓�河渠���棰�����涓�dp[i]���㈡��浠�广大�����绱�锛�涓�涓�疏浚�����涓�涓�锛�

    ���介�や�nums[j]锛�杩�����nums[k]锛�nums[p] 绛�绛�绛�绛�����浠�dp[i]�や����界��河渠�dp[j]+1锛�杩������界��河渠�dp[k]+1锛�dp[p]+1 绛�绛�绛�绛�����浠ユ��浠�姹�dp[i]锛���瑕��惧��dp[j]+1锛�dp[k]+1锛�dp[p]+1 绛�绛�绛�绛�涓�����澶у�笺��锛�����3涓�绛�绛�绛�绛�涓��借�琛�河渠���绮�锛�涓昏�����涓哄��海洋�����甯稿�规���ㄨ�����璺���锛�杩���寮鸿���������甯����借�颁�杩���棰���锛�锛�

    �规划�

    dp[i] = max(dp[j]+1锛�dp[k]+1锛�dp[p]+1锛�.....)

    ��瑕�婊¤冻锛�

    nums[i] > nums[j]

    nums[i] > nums[k]

    nums[i] > nums[p]

    ....

    ����锛���浠�����瑕��惧��dp�扮演�涓�����澶у�硷�广大辨����浠�瑕��剧��绛�妗���

    ����疏浚�姣�锛���浠�缁��舵���撅�

    骞茶揣锛��捐В绠�娉������ㄦ��瑙���绯诲��

    3.3 Go璇�瑷�绀轰�

    �规������锛�寰��颁唬��濡�涓�锛�

    func lengthOfLIS(nums []int) int {
        if len(nums) < 1 {
            return 0
        }
        dp := make([]int, len(nums))
        result := 1
        for i := 0; i < len(nums); i++ {
            dp[i] = 1
            for j := 0; j < i; j++ {
                //杩�琛�浠g��广大辨��涓���涓��d锅 绛�绛�绛�绛�
                if nums[j] < nums[i] {
                    dp[i] = max(dp[j]+1, dp[i])
                }
            }
            result = max(result, dp[i])
        }
        return result
    }
    
    func max(a, b int) int {
        if a > b {
            return a
        }
        return b
    }

    �ㄦ��瑙���绯诲����锛�涓�瑙�褰㈡��广大�璺�寰���

    ���㈢������浠���杩�棰��������夸���海洋�搴�����浠ュ��"��澶у��搴���"锛�海洋�涔�河渠�DP锛��ㄦ��瑙���锛��ㄧ嚎�у�崇郴涓��������规���杩�绉������规�锛�涔��ㄨ�绛瑰��涓�琚�绉颁负��绾挎�у�ㄦ��瑙�����锛��蜂������� �������芥�颁负�瑰��������绾挎�у�芥�起�绾�����杩�河渠�������绾挎�т�绛�寮���绛�寮�锛�������姹������芥�扮演����澶у�兼����广大��头����杩��瑰ぇ疏浚朵�涓轰�瑙e�冲��锛�涓���瑕�姝昏�起��翠�瑕�����纭�濂�锛�

    �ㄦ����涓�锛���浠�广大�缁х图����涓����ュ井�哄��河渠�涔�����棰���锛�甯�����浠ョ�辨�ら�涓�涔�����棰���杩�琛�瀵规��璁鸿��锛�杩���椤哄�╂�瑙o�

    4.1 涓�瑙�褰㈡��广大�璺�寰���

    棰���锛�缁�疏浚�涓�涓�涓�瑙�褰�锛��惧�鸿��椤跺��涓�����广大�璺�寰�����

    绀轰�:

    姣�涓�姝ュ���界Щ�ㄥ�颁�涓�琛�涓��搁�荤��缁��逛���

    岛�濡�锛�缁�疏浚�涓�瑙�褰�锛�

    骞茶揣锛��捐В绠�娉������ㄦ��瑙���绯诲��

    ��椤跺��涓�����广大�璺�寰���涓� 11锛��规划�2 + 3 + 5 + 1 = 11锛���

    4.2 ��椤跺��涓��捐В����

    兄弟�����浠�����棰���锛�瑕��剧����涓�瑙�褰㈡��广大�璺�寰���锛�杩���涓��ユ������锛���璁炬��浠���涓�涓�涓�瑙�褰�锛�[[2], [3,4], [6,5,7], [4,1,8,3]]

    骞茶揣锛��捐В绠�娉������ㄦ��瑙���绯诲��

    �d�涓��颁�����广大�璺�寰���广大辨��2-3-5-1锛�绛�河渠�11��

    �变���浠���浣跨�ㄦ�扮演��ュ��涔�涓�涓�涓�瑙�褰�锛���浠ヤ究浜���浠�����锛���浠�广大�涓�瑙�褰㈢�寰�杩�琛��瑰��锛�

    骞茶揣锛��捐В绠�娉������ㄦ��瑙���绯诲��

    杩��风�稿�河渠���浠�广大��翠釜涓�瑙�褰㈣�琛�河渠���浼搞��杩��跺��锛���浠��规��棰���涓�缁��雾���′欢锛�姣�涓�姝ュ���界Щ�ㄥ�颁�涓�琛�涓��搁�荤��缁��逛����跺��涔�广大辩����河渠�锛�姣�涓�姝ユ��浠����藉�涓�绉诲�ㄤ��兼�����充�绉诲�ㄤ��笺��广大��惰浆����浠g��锛���濡�2���ㄧ����绱�浣�缃�涓�[0,0]锛��f��浠�寰�涓�绉诲�ㄥ氨���界Щ�ㄥ��[1,0]����[1,1]��浣�缃�涓�����濡�5���ㄧ��浣�缃�涓�[2,1]锛����蜂����界Щ�ㄥ��[3,1]��[3,2]��浣�缃�涓���濡�涓��炬��绀猴�

    骞茶揣锛��捐В绠�娉������ㄦ��瑙���绯诲��

    棰�����纭�河渠�涔���锛��板�ㄦ��浠�寮�彭�杩�琛�������棰���寰����炬��涓�涓��炬��浼�瑙g����棰�锛�骞朵���浠ヤ�海洋���棰�����浼�瑙h�琛���寤恒����浠ユ��浠���杩��ㄦ��瑙���杩�琛�姹�瑙c��兄弟���锛���浠�疏浚�涔��舵��锛�

    dp[i][j] : 琛ㄧず����绗�i琛�j����绱�����广大�璺�寰���

    ��浠�寰�疏浚规���冲�板��浠ヨ��椤跺��涓�杩�琛�������骞朵�锛���璁烘������璺�寰�����涓��★�疏浚�涓�疏浚�瑕�缁�杩���椤朵�����绱�锛���[0,0]����浠ユ��浠���瑕�瀵�dp[0][0]杩�琛���彭�����

    dp[0][0] = [0][0]浣�缃����ㄧ����绱���

    缁х图����锛�濡�����浠�瑕�姹�dp[i][j]锛��d��朵�疏浚�浼�浠���宸卞ご椤朵���涓や锅��绱�绉诲�ㄨ���ャ��

    骞茶揣锛��捐В绠�娉������ㄦ��瑙���绯诲��

    濡�5杩�涓�浣�缃�����广大�璺�寰���锛�瑕�涔���浠�2-3-5���ワ�瑕�涔���浠�2-4-5���ャ���跺����涓ゆ�¤矾寰���涓�杈�广大���涓�涓��冲����杩�����浠�寰��扮演�舵��潘�绉绘�圭�锛�

    dp[i][j] = min(dp[i-1][j-1],dp[i-1][j]) + triangle[i][j]

    浣���锛���浠�杩���浼����颁�涓���棰�锛��や���椤朵�����绱�涔�澶�锛�

    骞茶揣锛��捐В绠�娉������ㄦ��瑙���绯诲��

    ��宸�杈圭����绱����戒���宸卞ご椤惰���ャ��锛�2-3-6-4锛�

    骞茶揣锛��捐В绠�娉������ㄦ��瑙���绯诲��

    ���宠竟����绱����戒���宸卞乏涓�瑙����ャ��锛�2-4-7-3锛�

    �跺��锛���浠�瑙�瀵����起�浣�河渠�绗�2琛�����绱�锛��芥���规����绱�锛���涓洪�藉���戒�[0,0]����绱�璧拌��ワ�

    骞茶揣锛��捐В绠�娉������ㄦ��瑙���绯诲��

    ��浠���浠ョ�存�ュ��剁�规��澶���锛�寰��起�

    dp[1][0] = triangle[1][0] + triangle[0][0]

    dp[1][1] = triangle[1][1] + triangle[0][0]

    ����锛���浠���瑕��惧�版����涓�琛���绱�涓�锛�璺�寰�����广大���涓�涓�锛�广大辨����浠���绛�妗����规划�

    l锛�dp�扮演��垮害

    result = min(dp[l-1,0]锛�dp[l-1,1]锛�dp[l-1,2]....)

    缁间���浠�广大卞����疏浚�河渠�锛���浠��诲�辫�琛�河渠�4姝ワ�

  • 疏浚�涔��舵��
  • �荤��舵��潘�绉绘�圭�
  • �����舵��潘�绉绘�圭�涓��芥弧瓒崇���规�����点��
  • 寰��版��缁�瑙�
  • 4.3 浠g������

    ����疏浚�姣�锛�浠g������锛�

    func minimumTotal(triangle [][]int) int {
        if len(triangle) < 1 {
            return 0
        }
        if len(triangle) == 1 {
            return triangle[0][0]
        }
        dp := make([][]int, len(triangle))
        for i, arr := range triangle {
            dp[i] = make([]int, len(arr))
        }
        result := 1<<31 - 1
        dp[0][0] = triangle[0][0]
        dp[1][1] = triangle[1][1] + triangle[0][0]
        dp[1][0] = triangle[1][0] + triangle[0][0]
        for i := 2; i < len(triangle); i++ {
            for j := 0; j < len(triangle[i]); j++ {
                if j == 0 {
                    dp[i][j] = dp[i-1][j] + triangle[i][j]
                } else if j == (len(triangle[i]) - 1) {
                    dp[i][j] = dp[i-1][j-1] + triangle[i][j]
                } else {
                    dp[i][j] = min(dp[i-1][j-1], dp[i-1][j]) + triangle[i][j]
                }
            }  
        }
        for _,k := range dp[len(dp)-1] {
            result = min(result, k)
        }
        return result
    }
    
    func min(a, b int) int {
        if a > b {
            return b
        }
        return a
    }

    骞茶揣锛��捐В绠�娉������ㄦ��瑙���绯诲��

    杩�琛�涓��㈢��浠g��锛���浠����颁娇�ㄧ����海洋�杩�澶с����浠���娌℃��浠�涔���娉���浠ュ��缂╁��海洋���锛���杩�瑙�瀵���浠����起��ㄦ��浠���椤跺��涓���杩�绋�涓�锛��跺����浠�����瑕�浣跨�ㄥ�颁�涓�灞�涓�宸茬�绱�绉�璁$��疏浚�姣����版��锛�骞朵�涓�浼���娆¤�块��涔�������绱��版����缁��舵���惧�涓�锛�

    骞茶揣锛��捐В绠�娉������ㄦ��瑙���绯诲��

    浼�������浠g��濡�涓�锛�

    func minimumTotal(triangle [][]int) int {
        l := len(triangle)
        if l < 1 {
            return 0
        }
        if l == 1 {
            return triangle[0][0]
        }
        result := 1<<31 - 1
        triangle[0][0] = triangle[0][0]
        triangle[1][1] = triangle[1][1] + triangle[0][0]
        triangle[1][0] = triangle[1][0] + triangle[0][0]
        for i := 2; i < l; i++ {
            for j := 0; j < len(triangle[i]); j++ {
                if j == 0 {
                    triangle[i][j] = triangle[i-1][j] + triangle[i][j]
                } else if j == (len(triangle[i]) - 1) {
                    triangle[i][j] = triangle[i-1][j-1] + triangle[i][j]
                } else {
                    triangle[i][j] = min(triangle[i-1][j-1], triangle[i-1][j]) + triangle[i][j]
                }
            }  
        }
        for _,k := range triangle[l-1] {
            result = min(result, k)
        }
        return result
    }
    
    func min(a, b int) int {
        if a > b {
            return b
        }
        return a
    }

    骞茶揣锛��捐В绠�娉������ㄦ��瑙���绯诲��

    �ㄦ��瑙���绯诲��河渠�锛���广大�璺�寰���

    �ㄤ���涓�锛���浠���杩�����锛�椤哄�╁����河渠���涓�瑙�褰㈡��广大�璺�寰��������ㄦ��瑙���棰�瑙c���ㄦ����涓�锛���浠�缁х图��涓����镐技棰���锛�浠ユ��藉���ㄦ���¤�绉���璺�寰���������棰���璇�涓�澶�璇达�����棰���锛�

    5.1 ��广大�璺�寰���

    棰���锛�缁�疏浚�涓�涓�������璐��存�扮演�� m x n 缃��硷�璇锋�惧�轰��′�宸�涓�瑙��板�充�瑙���璺�寰�锛�浣垮�璺�寰�涓����板���诲��涓烘��广大���璇存��锛�姣�娆″���藉��涓��������崇Щ�ㄤ�姝ャ��

    绀轰�:

    杈���:

    [

    [1,3,1],

    [1,5,1],

    [4,2,1]

    ]

    杈���: 7

    瑙i��: ��涓鸿矾寰� 1��3��1��1��1 ���诲����广大���

    5.2 �捐В����

    兄弟�����浠�����棰���锛�瑕��剧���� ��广大�璺�寰���锛�杩���涓��ユ������锛���璁炬��浠���涓�涓� m*n ���╁舰 锛�[[1,3,1],[1,5,1],[4,2,1]]

    骞茶揣锛��捐В绠�娉������ㄦ��瑙���绯诲��

    �d�宸�涓�瑙��板�充�瑙�����广大�璺�寰���锛���浠���浠ュ�疏浚规�����哄氨��1-3-1-1-1锛�杩�涓��¤矾寰�锛�缁���绛�河渠�7��

    棰�����纭�河渠�锛���浠�缁х图杩�琛�������璇ラ�涓�涓�涓���姹�涓�瑙�褰㈡��广大�璺�寰���涓��凤�棰������剧������浠ヤ�海洋���棰�����浼�瑙h�琛���寤猴���浠ユ��浠�����浣跨�ㄥ�ㄦ��瑙���杩�琛�姹�瑙c��兄弟���锛���浠�疏浚�涔��舵��锛�

    dp[i][j] : 琛ㄧず����绗�i琛�j����绱�����广大�璺�寰���

    ���凤���涓轰换浣�涓��″�拌揪�充�瑙���璺�寰�锛��戒�缁�杩�[0,0]杩�涓���绱�����浠ユ��浠���瑕�瀵�dp[0][0]杩�琛���彭�����

    dp[0][0] = [0][0]浣�缃����ㄧ����绱���

    缁х图����锛��规��棰���缁����′欢锛�濡�����浠�瑕�姹�dp[i][j]锛��d�疏浚�涓�疏浚���浠���宸辩��涓��规����宸�杈圭Щ�ㄨ���ャ��濡�涓��炬��绀猴�

    骞茶揣锛��捐В绠�娉������ㄦ��瑙���绯诲��

  • 5锛����戒�3����1绉诲�ㄨ����
  • 2锛����戒�5����4绉诲�ㄨ����
  • 4锛�浠�1绉诲�ㄨ����
  • 3锛�浠�1绉诲�ㄨ����
  • 绾㈣�蹭�缃�蹇�椤讳����蹭�缃�绉诲�ㄨ����
  • 杩�����浠�寰��扮演�舵��潘�绉绘�圭�锛�

    dp[i][j] = min(dp[i-1][j],dp[i][j-1]) + grid[i][j]

    ���锋��浠���瑕�����涓ょ��规�����碉�

  • ��涓���涓�琛�锛����界�卞乏杈圭Щ�ㄨ���ワ�1-3-1锛�
  • ��宸�杈逛���锛����界�变��㈢Щ�ㄨ���ワ�1-1-4锛�
  • 骞茶揣锛��捐В绠�娉������ㄦ��瑙���绯诲��

    ����锛���涓烘��浠���������浠�宸�涓�瑙�璧板�板�充�瑙�锛��翠釜缃��肩����广大�璺�寰����跺��广大辨�������充�瑙���绱�����广大�璺�寰������规划�

    璁撅�dp���垮害涓�l

    ��缁�缁���广大辨��锛�dp[l-1][len(dp[l-1])-1]

    缁间���浠�广大卞����疏浚�河渠�锛���浠��诲�辫�琛�河渠�4姝ワ�

  • 疏浚�涔��舵��
  • �荤��舵��潘�绉绘�圭�
  • �����舵��潘�绉绘�圭�涓��芥弧瓒崇���规�����点��
  • 寰��版��缁�瑙�
  • 5.3 浠g������

    ����疏浚�姣�锛�浠g������锛�

    func minPathSum(grid [][]int) int {
        l := len(grid)
        if l < 1 {
            return 0
        }
        dp := make([][]int, l)
        for i, arr := range grid {
            dp[i] = make([]int, len(arr))
        }
        dp[0][0] = grid[0][0]
        for i := 0; i < l; i++ {
            for j := 0; j < len(grid[i]); j++ {
                if i == 0 && j != 0 {
                    dp[i][j] = dp[i][j-1] + grid[i][j]
                } else if j == 0 && i != 0 {
                    dp[i][j] = dp[i-1][j] + grid[i][j]
                } else if i != 0 && j != 0 {
                    dp[i][j] = min(dp[i-1][j], dp[i][j-1]) + grid[i][j]
                }
            }
        }
        return dp[l-1][len(dp[l-1])-1]
    }
    
    func min(a, b int) int {
        if a > b {
            return b
        }
        return a
    }

    骞茶揣锛��捐В绠�娉������ㄦ��瑙���绯诲��

    ���凤�杩�琛�涓��㈢��浠g��锛���浠����颁娇�ㄧ����海洋�杩�澶с����娌℃��浠�涔���娉���浠ュ��缂╁��海洋���锛���杩�瑙�瀵���浠����起��ㄦ��浠���宸�涓�瑙��板�充�瑙�璁$����涓����圭����广大�璺�寰�����杩�绋�涓�锛���浠�����瑕�浣跨�ㄥ�颁���宸茬�绱�绉�璁$��疏浚�姣����版��锛�骞朵�涓�浼���娆¤�块��涔�������绱��版����缁��舵���惧�涓�锛�(澶у�剁��杩�涓�杩�绋���涓������凤��跺��濡���澶у�剁��绌舵���山�����璇�锛�广大变����板�ㄦ���风���稿�绠�娉�涓�锛�广大辨��涓�澶�棰�涓虹把浼艰�绉������规�锛�杩���广大变�娣辩┒河渠�)

    骞茶揣锛��捐В绠�娉������ㄦ��瑙���绯诲��

    浼�������浠g��濡�涓�锛�

    func minPathSum(grid [][]int) int {
        l := len(grid)
        if l < 1 {
            return 0
        }
        for i := 0; i < l; i++ {
            for j := 0; j < len(grid[i]); j++ {
                if i == 0 && j != 0 {
                    grid[i][j] = grid[i][j-1] + grid[i][j]
                } else if j == 0 && i != 0 {
                    grid[i][j] = grid[i-1][j] + grid[i][j]
                } else if i != 0 && j != 0 {
                    grid[i][j] = min(grid[i-1][j], grid[i][j-1]) + grid[i][j]
                }
            }
        }
        return grid[l-1][len(grid[l-1])-1]
    }
    
    func min(a, b int) int {
        if a > b {
            return b
        }
        return a
    }

    骞茶揣锛��捐В绠�娉������ㄦ��瑙���绯诲��

    ��绯诲��������绋�涓��戒�浼��ㄥ�板�����璇�瑷��规�э�澶у�朵���瑕���蹇�娌℃��海洋�杩�go��绠�娉����虫����瑕�锛�浣跨��go绾�灞�浣����卞ソ��

    ����兄弟���河渠���浼���-娴╀�璁茬��娉�