【笔试】给出N个物品价格,每件物品最多选一件,是否能恰好组合金额M

题目

给出N个物品价格,每件物品最多选一件,是否能恰好组合金额M。能输出1,不能输出0。
输入
输入 N 
输入 N 个价格p
输入金额 M
输出
能组合出来,输出 1,否则输出 0

样例输入
6
99 199 1999 10000 39 1499
10238
样例输出
1

 

解答

深度遍历,对于一个物品每次有两个选择:选取或不选取。注意剪枝。

 1 #include
 2 #include
 3 using namespace std;
 4 int N, M;
 5 vector<int> v;
 6 bool res = false;
 7 void dfs(int num, int m) {
 8     if (res) return;
 9     if (m == 0) {
10         res = true;
11         return;
12     }
13     if (m <0 || num >= N) return;
14     else {
15         dfs(num + 1, m - v[num]);
16         dfs(num + 1, m);
17     }
18 }
19 int main() {
20     cin >> N;
21     for (int i = 0; i < N; i++) {
22         int tmp;
23         cin >> tmp;
24         v.push_back(tmp);
25     }
26     cin >> M;
27     res = false;
28     dfs(0, M);
29     if (res) cout << 1;
30     else cout << 0;
31 }

 

转载于:https://www.cnblogs.com/yuchi328/p/9688152.html

你可能感兴趣的:(【笔试】给出N个物品价格,每件物品最多选一件,是否能恰好组合金额M)