そして用T
問題の説明
⼩ズーム⼀nは整数⼀彼らが所定値Tに等しくなるようにこれらの元素の濃度は、選択されました。各要素の上限は1つが選択されていない⼀できず、⼀回選択しました。
START入力フォーマット
最初のフレーム⾏⼀正の整数n-は、整数の集合内の要素の数を表します。
セカンドショット⾏ n個のスペースを使用することで区切られた整数、。
T整数⼀⾏第三、及び達成することを約束。
出力フォーマット
存在する場合、すなわちドライ⾏出力、各⾏⼀ソリューションの出力は、選択された数は、入力STARTの順に配置されています。
最優先含む溶液の複数のセットは、出力されない場合はN の整数、含有又は含有しない場合、優先第一出力含まない、n-1の整数を
などなど。総出力最後のフレーム⾏⽅場合。
サンプルを失うSTART
5
-7 -3 -2 5 9
0
サンプル出力
-3 -2 5
-7 -2 9
2
スケールデータと規則
1 <= N <= 22 T <= maxlongint
要素の集合とどんな超えない
長い
範囲を
分析:1スケールのデータのn <= 22、再帰検索はないテイクに各数値を取るか選択することが、タイムアウトしません
2.タイトル先時間の検索順序の遵守を確保するためには、フロントに戻ってから検索 -
#include <iostream>
#include <vector>
using namespace std;
vector<int> v, ans;
int n, k, cnt;
void dfs(int num, int sum) {
if (num == -1) {
if (sum == k && ans.size() > 0) {
for (int i = ans.size() - 1; i >= 0; i--) {
if (i != 0) {
printf("%d ", ans[i]);
} else {
printf("%d\n", ans[i]);
}
}
cnt++;
}
} else {
dfs(num - 1, sum);
ans.push_back(v[num]);
dfs(num - 1, sum + v[num]);
ans.pop_back();
}
}
int main() {
scanf("%d", &n);
v.resize(n);
for (int i = 0; i < n; i++)
scanf("%d", &v[i]);
scanf("%d", &k);
dfs(n - 1, 0);
printf("%d\n", cnt);
return 0;
}