现在的位置: 首页 > 综合 > 正文

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

2014年06月10日 ⁄ 综合 ⁄ 共 473字 ⁄ 字号 评论关闭
/*
 * 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;
}


抱歉!评论已关闭.