【笔试】给出N个物品价格,每件物品最多选一件,是否能恰好组合金额M
题目
给出N个物品价格,每件物品最多选一件,是否能恰好组合金额M。能输出1,不能输出0。
输入
输入 N
输入 N 个价格p
输入金额 M
输出
能组合出来,输出 1,否则输出 0
样例输入
6
99 199 1999 10000 39 1499
10238
样例输出
1
解答
深度遍历,对于一个物品每次有两个选择:选取或不选取。注意剪枝。
1 #include<iostream> 2 #include<vector> 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 }
浙公网安备 33010602011771号