蒜头君去书店买书,他有m元钱,书店里面有n本书,每本书的价格为 pi元。蒜头君很爱学习,想把身上钱都用来买书,并且刚好买 k 本书。请帮蒜头君计算他是否能刚好用m元买k本书。
输入格式 第一行输入 3 个整数 m(1≤m≤100000000),n(1≤n≤30),k(1≤k≤min(8,n)) 接下来一行输入 nn 个整数,表示每本书的价格pi(1≤pi≤100000000)。
输出格式 如果蒜头君能刚好用m元买k本书,输入一行"Yes", 否则输出"No"。
样例输入1 10 4 4 1 2 3 4 样例输出1 Yes 样例输入2 10 4 3 1 2 3 4 样例输出2 No #include <bits/stdc++.h> using namespace std; long long int m, n, k, a[30], c = 0, s = 0, cc = 0; long long int dfs(long long int x) { s = x; s += a[c]; cc++; long long int yy = cc; long long int y = c; c++; if (s > m || cc > k) { if (c == n) return 0; else { cc--; return dfs(x); } } else if (c == n && (s < m || cc < k)) return 0; else if (s == m && cc == k) return 1; else { long long int t = dfs(s); if (t == 1) return 1; if (t == 0) { c = y + 1; cc = yy - 1; return dfs(x); } } } int main() { long long int i; scanf("%lld%lld%lld", &m, &n, &k); for (i = 0; i < n; i++) scanf("%lld", &a[i]); if (dfs(0)) printf("Yes"); else printf("No"); }