POJ1651 곱셈 퍼즐 (검색 메모리 세그먼트 DP +)

승산 퍼즐 카드는 단일 양의 정수를 포함하는 각각의 행과 함께 재생된다. 이동 플레이어 동안 포인트의 수는 촬영 카드의 번호와 왼쪽과 오른쪽에 카드 번호의 제품에 동일 행과 점수에서 하나 개의 카드를합니다. 첫 번째와 행의 마지막 카드를 꺼낼 수 없습니다. 최종 전진 한 후, 두 카드는 행에 남아 있습니다.

목표는 득점의 총 수를 최소화하는 등의 순서로 카드를 가지고하는 것입니다.

예를 들어, 행의 카드는 숫자가 10 1 50 20 (5), 플레이어는 20, 50, 득점 후 1 카드 걸릴 수 있습니다 포함되어있는 경우
10 * 1 * 50 + 50 * 20 * 5 + 10 * 50 * 5 = 500 + 5000 + 2500 = 8000

그는 반대 순서로 카드를 걸릴 경우, 다음 50, 20, 1, 즉, 점수가 될 것이다
* 50 * 20 * 20 + 1 + 10 * 5 * 5 * 1 = 1000 + 100 + 50 = 1150 (1).

입력

입력의 첫 줄 장수 N 포함 (3 <= N <= 100). 두 번째 행은 공백으로 구분 된 1 내지 100 N 범위의 정수를 포함한다.

산출

최소 점수 - 출력은 하나의 정수를 포함해야합니다.

샘플 입력

6 
10 1 50 50 20 5

샘플 출력

(3650)은 
최종적으로 물을 비교 기간 DP가 발생하여, 표제 최상의 체인 매트릭스 곱셈이 다소 유사하다. 첫 번째 하위 분석, 확실히 세 개의 숫자, 두 가지에 관한 숫자와 마지막 작업의 마지막 남은 작동 시간 고정 된 수의. 선택할 수에 대한, + 1 ~ 오른쪽 1, 선거 후, 몇 가지 고려 사항이 전송 프로세스에 대한 뇌 시뮬레이션, 출시 전송 방정식 수있을 것입니다 방법에서 의사 결정 과정 와야되고, 왼쪽으로 열거 할 필요가 DP [1 [R] = 분 (DP [1] [R], 프로세스 (L, I) + 프로세스 (I, R) + A [I] *는 [1] * A [R]) 재귀 해결 경계 길이는, 길이 3 개의 값이 [L] * A [L 후 2 값은 0이며, *는 [R] + 1], DP는 메모리 어레이. 마지막으로, 수요가 [1] 인 DP [N].
#INCLUDE <iostream> 
#INCLUDE <cstdio> 
#INCLUDE <CString을>
 은 USING  스페이스 STD 단계;
 INT N-, A [ 105 ] DP [ 105 ] [ 105 ]; // 마지막 남은 좌우 단부 있어야 
INT 처리 ( INT L, INT R & LT) 
{ 
    IF (L의 + . 1 == R & LT) 
    { 
        DP [L] [R & LT] = 0 ;
         복귀  0 ; 
    } 
    IF (L + 2 == R & LT) 
    { 
        DP [L] [R & LT] = A [L] * A [리터 +1 * A [R];
        리턴 DP [1] [R]; 
    } 
    int로 난을;
    만약 (! DP [1] [R] = 0x3f3f3f3f ) 복귀 DP [1] [R];
    대해 (ⅰ L + = 1 ; I <= R- 1 ; I ++ ) 
    { 
        DP [1] [R] = 분 (DP [1] [R], 프로세스 (L, I) + 프로세스 (I, R) + A [I] *는 [1] * A [R]); 
    } 
    리턴 [R]을 [1,5]을 DP; 
 } 
INT 의 main () 
{ 
    CIN >> N;
    int로 난을; 
    memset 함수 (DP, 0x3f3f3f3f , 는 sizeof (DP));
    위한 은 (i = 1 ; i가 <= N; I ++)는 scanf ( " %의 D " , & A [I]); 
    COUT << 공정 ( 1 , N);
    반환  0 ; 
}

 

추천

출처www.cnblogs.com/lipoicyclic/p/12521572.html