동적 계획 - 채굴
4581 단어 알고리즘
첫 번 째 400 금 / 5 명, 두 번 째 500 금 / 5 명, 세 번 째 200 금 / 3 명, 네 번 째 300 / 4 명, 다섯 번 째 350 / 3 명.
코드 는 다음 과 같 습 니 다:
/**
* Created by Owen Chan
* On 2018-01-27.
*/
public class GoldDig {
public static void main(String[] argv) {
System.out.println("Most gold");
int worker = 10;
int[] gold = new int[]{400, 500, 200, 300, 350};
int[] person = new int[]{5, 5, 3, 4, 3};
getMostGold(worker, gold, person);
System.out.println("Most gold: " + getMostGold(worker, gold, person));
}
private static int getMostGold(int worker, int[] gold, int[] person) {
int[] preArray = new int[worker];
int[] tempArray = new int[worker];
for (int i = 0; i < worker; i++) {
preArray[i] = person[0] <= i + 1 ? gold[0] : 0;
System.out.println(preArray[i]);
}
for (int goldIndex = 1; goldIndex < gold.length; goldIndex++) {
for (int workerIndex = 0; workerIndex < worker; workerIndex++) {
int lastWorker = workerIndex + 1 - person[goldIndex]; //
if (lastWorker > 0) { //
tempArray[workerIndex] = Math.max(preArray[lastWorker - 1] + gold[goldIndex], preArray[workerIndex]);
} else if (lastWorker == 0) { //
tempArray[workerIndex] = Math.max(gold[goldIndex], preArray[workerIndex]);
} else { //
tempArray[workerIndex] = preArray[workerIndex];
}
}
System.arraycopy(tempArray, 0, preArray, 0, tempArray.length);
for (int i = 0; i < preArray.length; i++) {
System.out.println(preArray[i]);
}
}
return preArray[worker - 1];
}
}
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
【Codility Lesson3】FrogJmpA small frog wants to get to the other side of the road. The frog is currently located at position X and wants to get to...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.