您的位置:首页 > 其它

(Relax DFS专题)使用DFS来解决部分和问题

2013-12-17 13:37 363 查看
/*
* test.cpp
*
*  Created on: 2013年12月17日
*      Author: Administrator
*/

#include <iostream>

using namespace std;

const int maxn = 500;
int n,k;
int a[maxn];

bool dfs(int i , int sum){

//当n个数都决定以后,判断它们的和是否为k
if(i == n){
return sum == k;
}

if(dfs(i+1,sum)){//不加a[i]的情况
return true;
}

if(dfs(i+1,sum+a[i])){//加上a[i]的情况
return true;
}

return false;//如果加不加上a[i]都无法凑成k,则返回false
}
int main(){
while(scanf("%d",&n)!=EOF){
int i;
for(i = 0 ; i < n ; ++i){
scanf("%d",&a[i]);
}

scanf("%d",&k);

if(dfs(0,0)){
printf("Yes\n");
}else{
printf("No\n");
}
}

return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐