赞
踩
题目:来源于洛谷
输入样例:
4 3
3 7 12 19
输出样例:
1
分析:
计算k个数的和,要想使得它们之和不重复,那么就按数组下标升序 来求和
上代码:
参考东北小蟹蟹的博客
#include <iostream> #include <cstdio> using namespace std; bool isPrime(int n) { if (n < 1) { return false; } for (int i = 2; i*i <= n; ++i) { if (n%i == 0) { return false; } } return true; } int n, k; int arr[25]; long long ans; // choose_num 代表现在选择了多少个数 // sum代表当前的和 // start_index代表最开始的下标 void dfs(int choose_num, int sum, int start_index) { //当choose_num==k,表示选完了 if (choose_num == k) { if (isPrime(sum)) { ans++; } return; } for (int i = start_index; i < n; ++i) { dfs(choose_num + 1, sum + arr[i], i + 1); } return; } int main() { scanf("%d%d", &n, &k); for (int i = 0; i < n; ++i) { scanf("%d", &arr[i]); } dfs(0, 0, 0); printf("%d", ans); return 0; }
这道题想了好久都不会!
(ง •_•)ง
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。