이것은 동적 프로그래밍이 필요한 일반적인 배낭 문제이며 항목 공급에 제약이 없습니다. 나는이 수업을 위해 수업을 진행 해왔고 몇 시간 동안 알고리즘을 가지고 놀려고 노력했지만 여전히 나는 그곳에 가지 못하고있다.배낭 동적 프로그래밍
public static int fitBackPack(int[] W, int[] V, int T){
int[] Opt = new int[T+1];
Opt[0]=0;
for (int i=1; i<=T; i++){
int localMax=0;
int globalMax=0;
for (int j=0; j<W.length; j++){
if (W[j]<=i){
localMax = (T%W[j]<=W[j]) ? V[j] : V[j]+Opt[T-W[j]];
globalMax = (localMax>=globalMax) ? localMax : globalMax;
}
}
Opt[i]=globalMax;
}
//debugging purposes
for (int k=0; k<Opt.length; k++){
System.out.println("Opt["+k+"] = "+Opt[k]);
}
return Opt[T];
}
이 방법은 중량 각각 항목의 값과, 최대 가중치를 나타내는 정수 T를 들어, W 및 V의 정렬 된 배열을 가정한다. 내 산출물의 경우, T = 21까지의 모든 것이 작동하지만, 그 후에는 내가 원하는 바가 전혀없는 탐욕스러운 알고리즘처럼 작동하는 것 같습니다. 어떤 힌트를 주셔서 감사합니다, 감사합니다!
나는 실제로 코드를 업데이트했습니다. :) 그러나 나는 그것을 게시하지 않을 것이며, 그래서 당신 스스로 할 수 있습니다. – jmend