1日考えたんですが結局どう読んだらいいのか理解できませんでした。プログラムは下記のものです。
ちょこっと日本語の注記も書かれていますが、何をいっているのかさっぱりです。
#include <iostream>
#include <cstdio>
const int MAX_NUM = 20;
int a[MAX_NUM];
int n, k;
//iまででsumを作って、残りi以降を調べる
bool dfs(int i, int sum){
//n個決め終わったら、今までの和sumがkと等しいかを返す
if(i == n) return sum ==k;
//a[i]を使わない場合
if (dfs(i + 1, sum)) return true;
//a[i]を使う場合
if (dfs(i + 1, sum + a[i])) return true;
//a[i]を使うかどうかにかかわらずkが作れないのでfalseを返す
return false;
}
int main () {
// data input
std::cin >> n;
for(int i =0; i <n; i++){
std::cin >> a[i];
}
std::cin >> k;
//data output
if (dfs(0,0)) printf("Yes\n");
else printf("No\n");
return 0;
}
なにとぞヨロシクお願いします。