1 条题解
-
0
#include<bits/stdc++.h> using namespace std; // 全局变量定义 int arr[110]; // [1] 存储输入的数组元素 int N, K; // [2] N:数组元素个数,K:目标和 int ans = 0; // [3] 统计符合条件的方案数 // 深度优先搜索函数:遍历所有元素的选/不选组合,统计和为K的方案数 // index:当前处理到的元素下标,current_sum:当前已选元素的累计和 void dfs(int index, int current_sum) { // [4] 递归终止条件:所有元素处理完毕 if (index == N) { // [5] 若当前累计和等于目标和K,方案数+1 if (current_sum == K) ans++; return; } // 【核心剪枝逻辑】 // [6] 仅当「当前累计和 + 当前元素 ≤ K」时,才选择当前元素(避免后续无效分支) if (current_sum + arr[index] <= K) { dfs(index + 1, current_sum + arr[index]); // [7] 选择当前元素,处理下一个元素 } // [8] 不选择当前元素,直接处理下一个元素(无剪枝,后续仍可能凑出K) dfs(index + 1, current_sum); } // 主函数:处理输入、启动搜索、输出结果 int main() { // [9] 输入处理:读取元素个数N和目标和K cin >> N >> K; // [10] 读取N个元素存入数组arr for (int i = 0; i < N; ++i) { cin >> arr[i]; } // [11] 启动深度优先搜索:从第0个元素开始,初始累计和为0 dfs(0, 0); // [12] 输出符合条件的方案数 cout << ans << endl; return 0; }
- 1
信息
- ID
- 1275
- 时间
- 1000ms
- 内存
- 256MiB
- 难度
- 10
- 标签
- 递交数
- 3
- 已通过
- 1
- 上传者