//DFS 深度優先搜索;
#include<iostream>
#define N 20
int a[N];
int n, k;
bool dfs(int i, int sum) { //以遞歸來判斷;
if (i == n) return sum == k; //到達樹的最後一層,若sum與想得到的總和相等則爲true;
if (dfs(i + 1, sum)) return true; //先考慮不加a[i]的情況;
if (dfs(i + 1, sum + a[i])) return true; //加上a[i]的情況;
return false; //若前面諸多路徑沒有一條全爲true,則在最後這裏返回false;
}
void solve() {
if (dfs(0, 0)) cout << "yes" << endl;
else
{
cout << "no" << endl;
}
}
int main() {
cin >> n >> k; // n是數組裏的數字個數,k是想要得到的數的總和;
for (int i = 0; i < n; i++) {
cin >> a[i];
}
solve();
}
遞歸dfs
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.