papamelon 201. 部分和问题

地址 https://www.papamelon.com/problem/201
papamelon 201. 部分和问题

解答
使用dfs遍历各个数字选择或者不选择的情况,判断是否能够得到指定的和

#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;
}
上一篇:定义一个数组data,它包含100个double类型的元素。编写一个循环,将以下序列存储到数组的对应元素中:1/(2*3*4) 1/(4*5*6) 1/(6*7*8) 到1/(200*201*202)


下一篇:LeetCode 201. 数字范围按位与