P1036 [NOIP2002 普及组] 选数(递归)
[P1036 [NOIP2002 普及组] 选数]
我的思路是运用递归实现一个树状分支
例如
3 7 12 19
4选3,每个情况为
3-7-12
3-12-19
7-12-19
注意
我们用递归时在传参时要以和的形式传参。
如果先求和再传参就会发生错误.
#include <iostream>
#include <string>
#include <math.h>
#include <algorithm>
using namespace std;
int a[21];
int num = 0;
bool ac(int x) {
if (x % 2 == 0 && x != 2) {
return false;
}
for (int i = 2; i < x; i++) {
if (x % i == 0) {
return false;
}
}
return true;
}
void ad(int s, int k, int i, int n, int v ) {
if (i > k) {
if (ac(s)) {
num++;
return ;
}
return ;
}
for (int x = 1; x <= n - k + i ; x++) {
if (v >= x) {
continue;
}
ad(s + a[x], k, i + 1, n, x);
}
}
int main() {
int n, k;
cin >> n >> k;
for (int i = 1; i <= n; i++) {
cin >> a[i];
}
int s = 0;
ad(s, k, 1, n, 0);
cout << num;
return 0;
}
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· DeepSeek 开源周回顾「GitHub 热点速览」
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· AI与.NET技术实操系列(二):开始使用ML.NET
· 单线程的Redis速度为什么快?