部分和问题,深度优先搜索

来源:互联网 发布:linux服务器开发前景 编辑:程序博客网 时间:2024/06/10 04:09
//部分和问题,给定正整数a1,a2,a3...,判断是否可以从中挑几个数使其和为k#include<iostream>using namespace std;#define MAXN 100int a[MAXN];int n,k;bool dfs(int cur,int sum)//深度优先从开始状态开始遍历所有状态{    //前n项都计算过    if(cur==n) return sum==k;    //未加上a[i]    if(dfs(cur+1,sum)) return true;    //加上a[i];    if(dfs(cur+1,sum+a[cur])) return true;    return false;}void Solution(){    if(dfs(0,0))  cout<<"yes"<<endl;    else cout<<"No"<<endl;}int main(){    cin>>n;    for(int i=0;i<n;i++)        cin>>a[i];    cin>>k;    Solution();    system("pause");}
0 0
原创粉丝点击