Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <stdio.h>
- int n, m;
- int a[10], ans[10];
- // 遞迴 idx: 現在在用第幾個銅版
- // sum: 現在加起來的總和
- void dfs(int idx, int sum) {
- if (sum == m) {
- printf("(%d", ans[0]);
- for (int i = 1; i < n; i++)
- printf(",%d", ans[i]);
- printf(")\n");
- return ;
- }
- if (idx == n)
- return ;
- // 這邊要注意一下順序~
- // 因為他要前面拿少的先輸出
- // 所以要先遞迴拿下一種的
- // 拿下一種硬幣
- dfs(idx + 1, sum);
- // 拿這種硬幣
- if (sum + a[idx] <= m) {
- ans[idx]++;
- dfs(idx, sum + a[idx]);
- ans[idx]--;
- }
- }
- int main() {
- scanf("%d", &n);
- for (int i = 0; i < n; i++)
- scanf("%d", &a[i]);
- scanf("%d", &m);
- dfs(0, 0);
- return 0;
- }
Add Comment
Please, Sign In to add comment