/*
* 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;
}
(Relax DFS专题)使用DFS来解决部分和问题
最新推荐文章于 2022-09-16 16:27:12 发布