#include<bits/stdc++.h>usingnamespace std;constint MAX_N =15;// n的最大值,這里設它為15int x, n, sum;// 輸入數據 int res;// 總方案數 int a[MAX_N];voiddfs(int i,int N,int S){// 遞歸終止條件:所有數都搜索完了(也可以是找到n盤食物了,同理) if(i == x){if(N == n && S == sum){// 如果食物數量和重量都符合要求,就把答案+1 ++res;}return;}dfs(i +1, N, S);// 如果不選當前菜dfs(i +1, N +1, S + a[i]);// 如果選當前菜 }intmain(){cin >> x >> n >> sum;for(int i =0; i < x;++i){cin >> a[i];}dfs(0,0,0);// 從編號為0的菜開始搜索,最開始有0個菜,重量和為0cout << res <<'\n';return0;}
#include<bits/stdc++.h>usingnamespace std;constint MAX_N =15;// n的最大值,這里設它為15int x, n, sum;// 輸入數據 int res;// 總方案數 int a[MAX_N];voiddfs(int i,int N,int S){if(N > n){// 剪枝1 return;}if(S > sum){// 剪枝2return;}// 遞歸終止條件:所有數都搜索完了(也可以是找到n盤食物了,同理) if(i == x){if(N == n && S == sum){// 如果食物數量和重量都符合要求,就把答案+1 ++res;}return;}dfs(i +1, N, S);// 如果不選當前菜dfs(i +1, N +1, S + a[i]);// 如果選當前菜 }intmain(){cin >> x >> n >> sum;for(int i =0; i < x;++i){cin >> a[i];}dfs(0,0,0);// 從編號為0的菜開始搜索,最開始有0個菜,重量和為0cout << res <<'\n';return0;}
int res =0x3f3f3f3f;// 答案int n, m;......voiddfs(......,int stp){// stp表示當前步數if(stp >= res){return;}if(符合條件){// 排除來不是最優解的情況后,此時stp肯定是目前的最優解res = stp;return;}......}