《挑战程序设计竞赛》 2^n类型的深搜

题意:从n个数中选取任意个数的数,看是否等于k。

代码给出了十分清晰简洁的优雅递归写法。#include <cstdio>#include <cstdlib>#include <iostream>#include <algorithm>#include <cstring>#include <map>#include <queue>#include <vector>#include <set>#include <stack>using namespace std;typedef long long int LL;const int M=100009,INF=0x3fffffff;int n,str[M],k;bool dfs(int i,int sum){if(i == n) return sum == k;//搜索到头,,递归终止条件,判断是否满足条件if(dfs(i+1,sum)) return true;//不选当前数if(dfs(i+1,sum+str[i])) return true;//选当前数return false;//无论选不选都不行则返回false}int main(void){while(~scanf("%d%d",&n,&k)) {for(int i = 0; i < n; i++) {scanf("%d",&str[i]);}if(dfs(0,0)) printf("YES!~\n");else printf("NO!~\n");}return 0;}

想要成功,就一定要和成功的人在一起,不然反之

《挑战程序设计竞赛》 2^n类型的深搜

相关文章:

你感兴趣的文章:

标签云: