部分和问题
来源:互联网 发布:云计算机房维护 编辑:程序博客网 时间:2024/05/20 11:31
这是程序设计中的一类经典问题,题目如下:
部分和问题
给定整数 a 1 、a 2 、…、a n ,判断是否可以从中选出若干数,使它们的和恰好为 k。
限制条件
1 ≤ n ≤ 20
-10^8 ≤ a i ≤ 10^8
-10^8 ≤ k ≤ 10^8
样例一
输入
n=4
a={1,2,4,7}
k=13
输出
Yes (13 = 2 + 4 + 7)
样例二
输入
n=4
a={1,2,4,7}
k=15
输出
No
#include <stdio.h>#define MAX_N 100000 //宏定义后无分号// 输入int a[MAX_N];int n, k;// 已经从前i项得到了和sum,然后对于i项之后的进行分支bool dfs(int i, int sum){// 如果前n项都计算过了,则返回sum是否与k相等 if (i == n) return sum == k;// 不加上a[i]的情况 if (dfs(i + 1, sum)) return true;// 加上a[i]的情况 if (dfs(i + 1, sum + a[i])) return true;// 无论是否加上a[i]都不能凑成k就返回false return false;}void solve(){ if (dfs(0, 0)) printf("Yes\n"); else printf("No\n");}int main(){ scanf("%d", &n); for(int i = 0; i < n; i++) scanf("%d", &a[i]); scanf("%d", &k); solve(); return 0;}
0 0
- DFS 部分和问题
- 部分和问题
- 多重部分和问题
- 部分和问题
- 部分和问题
- 部分和问题
- nyoj 部分和问题
- nyoj-部分和问题
- nyoj1058部分和问题
- 部分和问题
- nyoj 部分和问题
- 部分和问题
- 部分和问题
- 部分和问题
- 多重部分和问题
- 部分和问题
- 部分和问题
- 部分和问题
- 编程接口的广义思考
- 安装capistrano
- [CSAPP笔记][第九章虚拟存储器][十分核心]
- Android绘图机制与处理技巧(二)——Android图像处理之色彩特效处理
- Nginx - 配置
- 部分和问题
- 教你怎么在 Mac 电脑上进行语音实时输入
- s5pv210 datasheet_system_DISPLAY CONTROLLER
- 稳定排序和不稳定排序
- C++类之构造器和析构器
- 计算机外部设备功能
- Java代码实现依赖注入
- 控制反转(IoC)与依赖注入(DI)
- Math Summary