给定一定面值的硬币 coins{1,3,5,10...n},求组成任意一个总数sum需要的最少硬币数量。
例如,总数为sum,硬币为{1,3,5,7}.
不过下面的代码在硬币为{3,5,7}时不能正常工作。因为本题的解法是,根据前一个状态计算下一个状态。如果coins是{3,5,7},则例如sum=6时无解,那么后面的状态也不能依赖这个状态了。
public class Testing {
public static void main(String[] args) {
Testing.coin();
}
static int i;
static int j;
static int[] min = new int[50];
static void coin() {
int sum = 27;
min[0] = 0;
int[] coins = new int[]{1,3,5,7};
for(int i=1;i<=sum;i++){
for(int v : coins){
if(v<=i && min[i-v]+1 < min[i-1]+1){
min[i]=min[i-v]+1;
}
if (min[i] == 0){
min[i] = min[i - 1] + 1;
}
}
}
for(int i=0;i<=sum;i++){
System.out.println(i +":"+min[i]);
}
}
}