P1036 选数(DFS)
P1036 选数 题目描述 已知 n个整数 x1,x2,…,xn,以及11个整数k(k<n)。从n个整数中任选k个整数相加,可分别得到一系列的和。例如当n=4,k=3,4个整数分别为3,7,12,19时,可得全部的组合与它们的和为: 3+7+12=22 3+7+19=29 7+12+19=38 3+12+19=34。 现在,要求你计算出和为素数共有多少种。 例如上例,只有一种的和为素数:3+7+19=29。 输入格式 键盘输入,格式为: n,k1≤ n ≤20, k < n ) x 1, x 2,…,*x**n*(1≤xi≤5000000) 输出格式 屏幕输出,格式为: 1个整数(满足条件的种数)。 输入输出样例 输入 4 3 3 7 12 19 输出 1 题解 因为n<=20,所以可以放心地DFS。因为要遍历每个数的选与不选,所以共有O(2^n^)的复杂度2^20^(1m)约为1e6,能过。 又因为sum最多是20*5e6=1e8,可以不用ll(我比较谨慎,所以开了ll) 真正要判断是否为质数的情况就是C(n,k),最差的时候n为20,k为10,方案数约有1.847e5种。 Judge函数为O(根号sum),sum最大为1e8,这时复杂度为1e4,如果执行1.847e5次就是1.847e9的复杂度。 综上所述,判断质数的总复杂度才是程序的主要复杂度。 这样写,虽然有些危险