DP의 배낭

.01 배낭 :

(다음은 하나의 차원을 작성할 수 있습니다

그것은 단지 특정 볼륨에서 배낭에 포장 항목 중 하나를 선택할 수 있습니다. F는 [I] [J] 난 J 항목의 체적 전시의 최대 값을 지시 ,.

위한 (INT 난 = 1; I <= N; I ++) {

  대 (INT J = V, J> = 0; J -) {

    만약 (w [I] <= J)

       F는 [I] [j]가 최대 = (F가 [I-1] [J], F [I-1] [JW [I] + C [I]);

    그밖에

      F [I] [J] = F [I-1] [V];

   }

}

장소가 있습니다 :

우리가 제목에서 볼 수있는 배낭 문제의 최적의 솔루션은, 사실,이 적게 같은 질문을 요청합니다있다. "어떤 질문도 정확히 , 배낭 작성시 최적의 솔루션을"일부 주제는 배낭을 기입 할 필요가 없습니다. 둘 사이에 차이 실현하는 것은 문제가 물었다된다는 점이다 초기화 서로 다른 시간.
첫 번째 질문이 요청하는 경우, 단지 채워진 가방을 제외하고 다음 초기화가 필요  F.을 [0] 0 , [1 ~ V]로 설정되어 다른 F  -   결과 F [V]를 확인하기 위해 그렇게로서, 그것은입니다 채워진 배낭 최적의 솔루션입니다.
배낭가 작성 될 필요가 있지만 가능한 한 대형 가격을 원하지 않을 경우, 초기화 F [0 ~ V]를해야 모든 으로 설정  0 .
이유는 무엇입니까? 이해 될 수있다 : F의 배열을 초기화하는 것은 어떤 상품이 법적 상태 배낭에 배치 할 수없는 사실이다. 당신은 단지의 전체 배낭, 그래서 필요한 경우 이 시간에만 용량의 배낭 0가 설치되지 않은 수의 경우 어떤 값이 0 "으로 가득한"입니다 다른 배낭의 용량이 법적 솔루션 없었다, 정의되지를 상태는, 값을 할당해야합니다  -   까지. 배낭 가득하지 않는 경우, 어떤 용량 배낭 갖는 합법적 용액을 그것의 초기 상태의 값이 0이되도록이 액의 값이 0 인 "아무것도로드 없다".
이 비는 정확하게 상황 - (자신의 첫 번째 테이블을 그릴 권장, 수동 상태 전이 프로세스가 무엇인지 시뮬레이션
Shoumo 추천 개인적으로 처리합니다
전 항목 (부피 값) \ J 볼륨 0 1 4 5
1 (2,3) 0 5 6 (7)
2 (1,2) 0 4 6 6
3 (3,4)  0 0
4 (2,2) 0 0 0 0 0 0
내 자신의 이해는 다음과 같습니다
요구 사항이 가득한이기 때문에, 그래서 그것을 전송하기 전에 어떤 상태 볼륨 업되어 있어야합니다. 나는 쉽게 상황을 이해하기 위해 처음부터 생각

만약 (w [I] <= J)

       F는 [I] [j]가 최대 = (F가 [I-1] [J], F [I-1] [JW [I] + C [I]);

    그밖에

      F [I] [J] = F [I-1] [V];

-------------------------------------------------- -------------------------- , 말을 자신의 제한된 이해를 이해하기 위해 정말 열심히 말하고 싶은, 기술은, 가난 그는 반 솔루션을 말한다

데이터, 코드, F [1]로서, [J] <- F [0] [J]. 상태 (F)는 [1] [J] 만 내지 f [0]과 같은 상태 천이를 통해 [J], 직접 상속 F [0] [J]와 F [0] [JW [1] (수있다 즉, 여기서 F [0] [0 ~ VW [I]) 말 즉, 전송되는 경우에만 음량 w 정확히 J [1], 그러한 F는 [I]는 [J]는 값이 유효하게 될 때 업데이트 ---- F 만 초기화로 [0] [0]이 증가 여전히 굉장히 작은 경우에도, 다른 음의 무한대 0이다. 이 미래의 상태 전이에서, 오직 현재 볼륨 상태 경우 실제로 융합 효과적으로 업데이트됩니다 때까지. 초기 값은 마이너스 무한대가 아닌 경우, 물품의 양이 수의 크기에 의해 한정되기 때문에, 모든 볼륨이있는 상태로 결합 될 수 없다.
정확하게는 반드시 기존 기지국의 유효 전송하기 전에 소정의 상태로 현재의 볼륨의 크기 요구 사항이없는없는 경우 (즉, 상기의 부피는 숫자로 결합 될 수 있음) - 0 어쨌든.

둘째 전체 배낭 :

즉 항목을 선택할 수있는 여러 번이다.

01 배낭 여러 조각으로 분할에 관한 문서와 함께 고려 될 수있다 (선택 몇번이지만하지만 어쨌든 제한 배낭 부피)

여전히 배낭 개념 01에 따라 해결 될 수하자 F [I]는 [V] 배낭 체적 V 최대 중량으로 상품 전의 i 번째를 나타내는

의사 코드 :

난 = 1..N를위한

배낭에서 V = 0..V // 01 상이위한 ①

F는 [V] 최대 = (F을 [V], F [VW [I] + C [I]) (V> = [I], 1 <I <= N = w) / / 참고 차원 Shihai F. 차별화는 ---- [I는 V]를 최대 (F. [I -1 V]를, F. [=  I , V -의 CI]가 Wi +) ②  

설명 : ① 그들은 그래서 이전 상태 0 찾기 위해, 이전 상태로 전송 될 수 있기 때문에 -> N을
달리 배낭 ② 01 ~ I-1 항목이 항목에 기초하여 볼륨 전의 상태에서 상속 될 수 있지만, 이러한 수단을 넣어 선택된다.

추천

출처www.cnblogs.com/becase/p/11858758.html