剣指offer-14.ロープを切るダイナミックプランニング、貪欲アルゴリズム-python

1166 ワード

#-*- coding:utf-8 -*-
'''
description:
 name:   
   :       n   ,      m (n>1,m>1),         k[0],k[1]....k[m],  k[0]*k[1]*..*k[m]          
'''


class Solution:
    def dynamic_programming(self, n):
        if n < 2:
            return 0
        if n == 2:
            return 1
        if n == 3:
            return 2
        tmp_lst = [0, 1, 2, 3]

        for i in range(4, n+1):
            max = 0
            for j in range(1, i//2+1):
                tmp = tmp_lst[j] * tmp_lst[i-j]
                if max < tmp:
                    max = tmp
            tmp_lst.append(max)
        return tmp_lst[n]

    '''
           n<=3                    ,  n>3                  
          n                4   
    '''
    def greedy_algorithm(self, n):
        if n < 2:
            return 0
        if n == 2:
            return 1
        if n == 3:
            return 2
        multi_3 = 0
        while n > 4:
            multi_3 += 1
            n -= 3
        return 3**multi_3*n



s = Solution()
print(s.dynamic_programming(8))
print(s.greedy_algorithm(4))