挑战程序设计竞赛(算法和数据结构)——17.1硬币问题(动态规划)的JAVA实现
Posted 小乖乖的臭坏坏
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了挑战程序设计竞赛(算法和数据结构)——17.1硬币问题(动态规划)的JAVA实现相关的知识,希望对你有一定的参考价值。
问题&思路:
代码:
import java.util.Scanner;
public class CoinChanging
public static void main(String[] args)
Scanner cin = new Scanner(System.in);
int n = cin.nextInt();
int m = cin.nextInt();
int C[] = new int[m];
for (int i=0;i<m;i++)
C[i] = cin.nextInt();
int T[][] = new int[m][n+1];
for (int i=0;i<m;i++)
T[i][0] = 0;
for (int j=1;j<=n;j++)
for (int i=0;i<m;i++)
if(i==0)//第一行,从最小的数开始,它只能使用当前面值
T[i][j] = T[i][j-C[i]] + 1;
else if(j-C[i]<0)//如果不使用这个面值,上一个值就不能算了,那么就只能顺延
T[i][j] = T[i-1][j];
else //正常情况
T[i][j] = Math.min(T[i-1][j], T[i][j-C[i]] + 1);
int min_value = Integer.MAX_VALUE;
for (int i=0;i<m;i++)
if (min_value>T[i][n])min_value = T[i][n];
System.out.println(min_value);
输入:
15 6
1 2 7 8 12 50
输出:
2
以上是关于挑战程序设计竞赛(算法和数据结构)——17.1硬币问题(动态规划)的JAVA实现的主要内容,如果未能解决你的问题,请参考以下文章
挑战程序设计竞赛(算法和数据结构)——分割(下)&快速排序的JAVA实现
挑战程序设计竞赛(算法和数据结构)——19.2九宫格拼图问题的JAVA实现
挑战程序设计竞赛(算法和数据结构)——7.1归并排序JAVA实现
挑战程序设计竞赛(算法和数据结构)——16.13线段相交问题(曼哈顿算法)的JAVA实现