分钞票,假设有 1块 5块 7块 10块 15块 20块的钱可用,如果要支付money元,问最少的组合方式
#include<stdio.h>
#include<stdlib.h>
/**
*分钞票,假设有 1块 5块 7块 10块 15块 20块的钱可用,如果要支付money元,问最少的组合方式
*/
#define RMB_LEN 7
int rmb[RMB_LEN];
int *r = NULL;
int min(int a , int b){
return a > b ? b : a;
}
int getNumRmb(int money){
rmb[1] = 1;
rmb[2] = 5;
rmb[3] = 7;
rmb[4] = 10;
rmb[5] = 15;
rmb[6] = 20;
r = (int *)malloc(sizeof(int) * (money+1));
memset(r , 0 , (money + 1)*sizeof(int));
int ret = runRmb(money);
return ret;
}
int runRmb(int money){
if(money == 1){
return 1;
}else if(money == 0){
return 0;
}else if(r[money] != 0){
return r[money];
}
int ret = money;/*直接赋最多money张*/
for(int i = 1 ; i < RMB_LEN ;i++){
if((money - rmb[i]) < 0){
break;
}
ret = min(1 + runRmb(money - rmb[i]) , ret);
}
r[money] = ret;
return ret;
}