이것은 동적 프로그래밍 접근법을 사용하여 해결 한 고전적인 배낭 문제입니다.배낭에서 요소를 찾는 방법 (요소를 얻는 모든 방법에 꼬임 필요)
here에이어서, 나는 배낭을 구성하는 요소의 유형을 결정하는 유사한 방법을 만들었습니다. 나는 한 가지 방법이 아니라 최종 답을 얻을 수있는 모든 방법을 찾아야합니다. 어떻게해야합니까?
현재 역순으로 작업하면 항목이 최대 값에 추가 된 한 가지 방법 만 찾을 수 있습니다. 그러나 필자의 의견으로는 항목이 최대 값에 추가되는 2 가지 이상의 방법이있을 수 있습니다. 이 두 가지 이상의 방법을 알고 싶습니다. 그 이유는 몇 가지 기준에 따라 최적의 항목 세트를 선택해야하기 때문입니다. 어떻게해야합니까? DP 매트릭스 또는 아래 코드를 사용해야합니까?
입력
제약 :
maxWeight = 100
ID/값/중량
1/50/40 2/40/303/30/40
4/50/40
출력 : 제약 조건을 기반으로 1,2,3 또는 2,3,4가있을 수 있습니다.
둘 다 동일한 점수와 무게를 합산합니다. 세트를 모두 어떻게 확인할 수 있습니까?
서곡 : ArrayList에있는 항목의 시간 속성이 특정 한도 내에서 을 떨어지면 내가 결정하고
. 나는 내 배플 (bool) 배열 (wasTaken)을 만들었고 을 가져갈 수있는 요소를 넣어 두었다. 여기서는 행렬을 통과하여 어떤 요소가 찍혔는지 확인하고 나중에 을 입력 한 다음 나중에 (정렬 한 후) 인쇄 할 항목의 ID를 저장합니다. int [] [] sol below는 이전 방법의 동적 프로그래밍 스타일로 채워진 행렬을 나타냅니다. i 값은 항목을 나타내고 Weight는 고려중인 가중치를 나타냅니다. 이것은 this 링크와 비슷한 방식으로 방식으로 이루어졌습니다.
내 현재 코드 :
public static void findElements(boolean[][] wasTaken, int maxWeight, ArrayList<Nodes> items, int[][] sol, int currentTime, int limit) {
int K = maxWeight;
int n = items.size();
int count = 0;
int[] forPrint = new int[n];
for (int i = n-1; i>=0; i--) {
if (wasTaken[i][K] == true && (currentTime - items.get(i).time <= limit)) {
forPrint[i] = items.get(i).index;
count++;
K = K - items.get(i).height;
}
}
Arrays.sort(forPrint);
showResult(count, forPrint);
}
무게, 최대 및 세트가 일치하지 않습니다. – greybeard
지적 해 주셔서 고마워하지만 내 생각에 그렇게 생각하지 않아, 내 코드를 실행할 때 정답을 얻는다 .. – stretchr