实现重复性剪枝选数
You cannot submit for this problem because the contest is ended. You can click "Open in Problem Set" to view this problem in normal mode.
#include <iostream>
#include <cstdio>
using namespace std;
int n, k, sum, ans;
int a[40];
bool xuan[40];
void dfs(int s, int cnt,int pos) {
if (s == sum && cnt == k) {
ans++;
}
for (int i = pos; i < n; i++) {
if (!xuan[i]) {
xuan[i] = 1;
xuan[i] = 0;
}
}
}
int main() {
scanf("%d%d%d",&n,&k,&sum);
for (int i = 0; i < n; i++) {
scanf("%d",&a[i]);
}
ans = 0;
dfs(0, 0 ,0);
printf("%d\n",ans);
return 0;
}
题目描述
已知 个整数 ,以及 个整数 ()。从 个整数中任选 个整数相加,可分别得到一系列的和。例如当 ,, 个整数分别为 时,可得全部的组合与它们的和为:
现在,要求你计算出和为sum的组合共有多少种。
输入格式
第一行两个空格隔开的整数 (且)。
第二行 个整数,分别为 ()。
输出格式
输出一个整数,表示种类数。
样例输入1
5 3 10
1 2 3 4 5
样例输出1
2
样例输入2
30 8 200
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30
样例输出2
70
提高班国庆测试Day02
- Status
- Done
- Rule
- OI
- Problem
- 4
- Start at
- 2023-10-3 8:45
- End at
- 2023-10-3 11:00
- Duration
- 2.3 hour(s)
- Host
- Partic.
- 11