석자 합병 문제 - 동태적 기획, 욕심
DP 。 3 :
(1) N , , : 2 , 。 N
: , , , 。 。
(2) N , , : 2 , 。 N ( )。
(3) (2) , , ?
---------------------
:JeanCheng
:CSDN
:https://blog.csdn.net/gatieme/article/details/49206193
: , !
import numpy as np
def merge_stones(stones):
num_stones = len(stones)
m = np.zeros(shape=(num_stones,num_stones))
p = np.zeros(shape=(num_stones,num_stones))
for i in range(num_stones - 1):
m[i][i+1] = stones[i] + stones[i+1]
for i in range(1,num_stones-1):
for j in range(num_stones - 1 - i):
k = j + i + 1
min = 10000000000000
for l in range(j+1,k):
temp = m[j][l] + m[l+1][k] + np.sum(stones[j:k+1])
if min > temp:
min = temp
min_p = l
m[j][k] = min
p[j][k] = min_p
return m[0][num_stones-1],p
def print_ret(stones,p,start,last,first_part=False):
if start < last:
print('(',end='')
mid = int(p[start][last])
print_ret(stones,p,start,mid,True)
print_ret(stones,p,mid+1,last,False)
print(')',end='')
else:
print(stones[start],end='')
if first_part:
print(',',end='')
if __name__ == '__main__':
# while True:
# num_stones = int(input('Input:
'))
# stones = []
# for s in map(int, input().split()):
# stones.append(s)
#
# if num_stones == len(stones):
# merge_stones(stones)
# else:
# print(' ')
max,p = merge_stones([4,4,5,9])
print_ret([4,4,5,9],p,0,len([4,4,5,9])-1)
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
다양한 언어의 JSONJSON은 Javascript 표기법을 사용하여 데이터 구조를 레이아웃하는 데이터 형식입니다. 그러나 Javascript가 코드에서 이러한 구조를 나타낼 수 있는 유일한 언어는 아닙니다. 저는 일반적으로 '객체'{}...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.