목표는 다른 프로그래밍 대신 동적 프로그래밍을 사용하는 것이 문제였습니다. 스팬 거리와 길이가 다른 케이블 세트가 있습니다. 거리에 정확히 도달하는 데 필요한 최소 케이블 수는 얼마입니까?
나에게 이것은 배낭 문제 처럼 보였지만 특정 길이의 배수가있을 수 있기 때문에 0/1 배낭 문제가 아닌 경계 배낭 문제였습니다. (각 항목의 값을 무게로 취급하십시오.) 검색된 공간의 확장에 신경 쓰지 않는 순진한 접근 방식을 취하면서, 제한된 배낭 문제를 0/1 배낭 문제로 변환하는 데 사용한 방법은 간단했습니다. 배수를 단일로 나누고 잘 알려진 동적 프로그래밍 알고리즘을 적용하십시오. 불행히도 이로 인해 차선책의 결과가 나옵니다.
예를 들어, 주어진 케이블 :
1 x 10ft,
1 x 7ft,
1 x 6ft,
5 x 3ft,
6 x 2ft,
7 x 1ft
목표 스팬이 13ft 인 경우 DP 알고리즘은 거리를 스팬하기 위해 7 + 6을 선택합니다. 욕심 많은 알고리즘은 10 + 3을 선택했을 것입니다. 그러나 최소한의 케이블 수를위한 넥타이입니다. 15 피트에 걸쳐있을 때 문제가 발생합니다. DP 알고리즘은 6 + 3 + 3 + 3을 선택하여 4 개의 케이블을 얻었고 욕심 많은 알고리즘은 3 개의 케이블에 대해서만 10 + 3 + 2를 올바르게 선택했습니다.
어쨌든, 0/1로 제한된 변환을 약간 스캔하면 여러 항목을 {p, 2p, 4p ...}로 변환하는 잘 알려진 접근법처럼 보입니다. 내 질문은 p + 2p + 4p가 여러 항목 수에 합산되지 않으면이 변환이 어떻게 작동합니까? 예를 들어 : 5 개의 3 피트 케이블이 있습니다. 3 + 2x3 + 4x3> 5x3이므로 {3, 2x3, 4x3}을 추가 할 수 없습니다. 대신 {3, 4x3}을 추가해야합니까?
[저는 현재 "오레곤 트레일 배낭 문제 (Oregon Trail Knapsack Problem)"문서를 작성하려고하지만 현재 동적 프로그래밍이 사용되지 않은 것처럼 보입니다.]