問題描述函數
100元錢,有幾種零錢,好比1元,5元,10元,求有幾種組合spa
分析code
時間複雜度O(m*n),空間複雜度O(n),徹底揹包問題blog
代碼以下input
1 #include <stdio.h> 2 #define N 100 3 int a[N + 5]; 4 int change[4]; //有幾種零錢 5 //主功能函數,找到一共須要幾種零錢 6 int findCount(int money, int countOfChange) 7 { 8 int i, j; 9 a[0] = 1; 10 for (i = 1; i <= countOfChange; i++) 11 { 12 for (j = change[i]; j <= money; j++) 13 { 14 //核心的代碼,就此一句 15 a[j] = a[j] + a[j - change[i]]; 16 } 17 /* 18 //去掉註釋,可打印每一步的狀況 19 for (j = 0; j <= money; j++) 20 printf("%d\t", a[j]); 21 puts("");*/ 22 23 } 24 return a[money]; 25 } 26 int main() 27 { 28 int money, num, count, i; 29 money = 6; 30 num = 3; 31 //一系列輸入 32 printf("input the money u have: "); 33 scanf("%d", &money); 34 printf("input the kinds of changes: "); 35 scanf("%d", &num); 36 for (i = 1; i <= num; i++) 37 { 38 printf("the %dth change: ", i); 39 scanf("%d", &change[i]); 40 } 41 count = findCount(money, num); 42 printf("the count is %d.\n", count); 43 return 0; 44 }