深度优先搜索策略
运用递归思想
问题截图
深搜思想:每一个元素加或者不加,一共是2^n种情况
初学深搜的笔记
- tips 1:
-如果有一个元素,想要作为全局元素,又没必要一个一个作为实参调用进每个函数,可以用全局定义变量的方式,直接在开头进行定义。 - tips 2:
-深搜其实就是递归,适用于小规模的问题,大规模一般不用。 - tips 3:
-如果是判断正误的题,巧用C++的bool返回值进行判断
#include <iostream>
int a[105]; //全局变量
bool dfs(int i,int sum,int n,int k)
{
if(i==n) //说明已经搜完了,搜到了最后一个元素
return (sum==k);
//如果没搜完,就继续
//此时是不加a【i】的情况
if(dfs(i+1,sum,n,k)) //如果返回值是true
return true;
if(dfs(i+1,sum+a[i],n,k))
return true;
else
return false;
}
int main()
{
int n,k,i; //n表示有多少个元素,k表示需要得到的和是多少
scanf("%d",&n);
for(i=0;i<n;i++)
scanf("%d",&a[i]);
scanf("%d",&k);
if(dfs(0,0,n,k)) printf("Yes\n");
else printf("No\n");
return 0;
}