您的位置:首页 > 其它

动态规划之最少硬币找零问题

2017-12-14 20:15 417 查看
假设有几种硬币,并且数量无限。请找出能够组成某个数目的找零所使用最少的硬币数。

private static final int MAX_VALUE = Integer.MAX_VALUE - 2;

public static int coinChange(int[] coins, int change) {
int[] seq = new int[change + 1];
int[] sum = new int[change + 1];
for (int i = 1; i <= change; i++) {
sum[i] = MAX_VALUE;
}
sum[0] = 0;
for (int i = 1; i < change + 1; i++) {
for (int j = 0; j < coins.length; j++) {
if (i >= coins[j] && (1 + sum[i - coins[j]]) < sum[i]) {
sum[i] = 1 + sum[i - coins[j]];
seq[i] = j;
}
}
}
int j = change;
while (j > 0) {
System.out.print(coins[seq[j]] + "\t");
j = j - coins[seq[j]];
}
System.out.println();
return sum[change];
}

public static void main(String[] args) {
Scanner in = new Scanner(System.in);
int[] coins = {2, 3, 4};
System.out.println(String.format("coins is %s", Arrays.toString(coins)));
while (in.hasNext()) {
int change = in.nextInt();
if (change == 0) {
break;
}
int coinNumber = coinChange(coins, change);
System.out.println(coinNumber == MAX_VALUE ? 0 : coinNumber);
}
}




http://www.edufyme.com/code/?id=33e75ff09dd601bbe69f351039152189
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: