//给N个数问能由其中若干个组成和为K
#include <bits/stdc++.h>
using namespace std;
int n,k,a[103];
bool dfs(int i,int sum){ //至此搜完了第I-1了个数进入第I个,然后和为SUM
if(i==n)return sum==k; //如果进第N个数(是没有的,因为AI只从0~14)就表示0~14个数搜完,返回和
if(dfs(i+1,sum))return true;//当前第I个数不取,往下一个数搜
if(dfs(i+1,sum+a[i]))return true;//当前第I个数要取,往下一个数搜
return false; //走到这里就是FALSE了
}
int main(){
cin>>n>>k; //有N个数,求和K
for(int i=0;i<n;i++)cin>>a[i]; //输出数组AI,注意是0下标起
if(dfs(0,0))cout<<"Y"<<endl; //如果深搜成功就返回Y
else cout<<'N'<<endl; //失败就N
return 0;
}
/*
4 13
1 2 4 7
Y
*/
记忆化
最新推荐文章于 2023-06-08 15:47:01 发布