papamelon 201. 部分和问题
地址 https://www.papamelon.com/problem/201
解答
使用dfs遍历各个数字选择或者不选择的情况,判断是否能够得到指定的和
时间复杂度 O(2^n)
#define _CRT_SECURE_NO_WARNINGS
#include <iostream>
using namespace std;
const int N = 50;
int arr[N];
int n, k,sum;
int dfs(int idx) {
if (sum == k) {
return 1;
}
if (idx >= n) { return 0; }
//尝试不选择该数
if (1 == dfs(idx + 1)) { return 1; }
//尝试选择该数
sum += arr[idx]; idx++;
if (1 == dfs(idx)) { return 1; }
idx--; sum -= arr[idx];
return 0;
}
int main()
{
while (~scanf("%d", &n)) {
sum = 0;
for (int i = 0; i < n; i++) { scanf("%d",&arr[i]); }
scanf("%d",&k);
if (1 == dfs(0)) {
printf("Yes\n");
}
else {
printf("No\n");
}
}
return 0;
}
作 者: itdef
欢迎转帖 请保持文本完整并注明出处
技术博客 http://www.cnblogs.com/itdef/
B站算法视频题解
https://space.bilibili.com/18508846
qq 151435887
gitee https://gitee.com/def/
欢迎c c++ 算法爱好者 windows驱动爱好者 服务器程序员沟通交流
如果觉得不错,欢迎点赞,你的鼓励就是我的动力
欢迎转帖 请保持文本完整并注明出处
技术博客 http://www.cnblogs.com/itdef/
B站算法视频题解
https://space.bilibili.com/18508846
qq 151435887
gitee https://gitee.com/def/
欢迎c c++ 算法爱好者 windows驱动爱好者 服务器程序员沟通交流
如果觉得不错,欢迎点赞,你的鼓励就是我的动力