Guest User

Untitled

a guest
Jan 22nd, 2019
64
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 0.69 KB | None | 0 0
  1. #include <stdio.h>
  2.  
  3. int n, m;
  4. int a[10], ans[10];
  5.  
  6. // 遞迴 idx: 現在在用第幾個銅版
  7. // sum: 現在加起來的總和
  8. void dfs(int idx, int sum) {
  9. if (sum == m) {
  10. printf("(%d", ans[0]);
  11. for (int i = 1; i < n; i++)
  12. printf(",%d", ans[i]);
  13. printf(")\n");
  14. return ;
  15. }
  16.  
  17. if (idx == n)
  18. return ;
  19.  
  20. // 這邊要注意一下順序~
  21. // 因為他要前面拿少的先輸出
  22. // 所以要先遞迴拿下一種的
  23.  
  24. // 拿下一種硬幣
  25. dfs(idx + 1, sum);
  26.  
  27. // 拿這種硬幣
  28. if (sum + a[idx] <= m) {
  29. ans[idx]++;
  30. dfs(idx, sum + a[idx]);
  31. ans[idx]--;
  32. }
  33. }
  34.  
  35. int main() {
  36. scanf("%d", &n);
  37. for (int i = 0; i < n; i++)
  38. scanf("%d", &a[i]);
  39. scanf("%d", &m);
  40.  
  41. dfs(0, 0);
  42. return 0;
  43. }
Add Comment
Please, Sign In to add comment