Java:コイン交換(発色アルゴリズム)
7570 ワード
質問する
に答える
時間的複雑さを考慮して,dfsで解決した問題を完全探索することを試みた.
硬貨の数と硬貨の配列を格納するためにdp配列dyを作成する.
j 1番目の硬貨の個数dy[j]は、j元を取り戻すために用いられる硬貨の最小個数である.
コインによっては、探しているコインの個数を計算し、dyを格納します.
おしゃべり
完全なコード
package inflearn;
import java.util.Scanner;
public class I1005 {
static int n;
static int m;
static int[] dy;
static int[] coinArr;
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
n = sc.nextInt();
coinArr = new int[n];
for (int i = 0; i < n; i++) {
coinArr[i] = sc.nextInt();
}
m = sc.nextInt();
dy = new int[m + 1];
for (int i = 1; i < dy.length; i++) {
dy[i] = Integer.MAX_VALUE;
}
System.out.println(knapsack());
}
static int knapsack() {
for (int coin : coinArr) {
for (int j = coin; j <= m; j++) {
int tmp = dy[j - coin] + 1;
if (dy[j] > tmp) dy[j] = tmp;
}
}
return dy[m];
}
}
Reference
この問題について(Java:コイン交換(発色アルゴリズム)), 我々は、より多くの情報をここで見つけました https://velog.io/@donsco/Java-동전-교환냅색-알고리즘テキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol