部分和问题(c/c++)

给定整数a1,a2,a3,...,an,判断是否可以从中
选出若干输使得它们的和恰好为k

第一行输入n代表几个数字

第二行输入数字

第三行输入结果

样例:
 4
 1 2 4 7
 13
 yes

 这是一道基础题,对于初学者而言使用两重循环无疑是最便捷的

#include
#include
using namespace std;

int main(void)
{
	int n,k,a1,sum=0;
	int flog=0;
	vectora;
	
	cin>>n;//数据输入 
	for(int i=0;i>a1;
	     a.push_back(a1);	
	}
	cin>>k;
	for(int i=0;i

 同时我们也可以使用深度优先搜索方法(DFS)

#include
using namespace std;

int n,k;
int a[100];
bool def(int i,int sum)
{
	if(i == n)
	{
		return sum == k;
	}
	//左子树,选中情况 
	if(def(i+1,sum+a[i]))
	{
		return true;
	}
	 //右子树,选中情况 
	if(def(i+1,sum))
	{
		return true;
	}
	
	return false;
}

int main(void)
{
	cin>>n;
	for(int i=0;i>a[i];
	}
	cin>>k;	
	if(def(0,0))
	{
		cout<<"yes";
	}
	else{
		cout<<"no";
	}
	
	return 0;
 } 

你可能感兴趣的:(c++,c++)