そして、トレーニングのためのアルゴリズムT
制限時間:メモリ制限が1.0S:256.0メガバイト
問題の説明
Nは整数である選択フォーカスのいくつかの要素の一つ大きさから、そのように指定された値Tへの等しいです 各要素の制限選挙はかつて、A選択されていないではありません。
入力形式
正の整数nの最初の行、整数の集合内の要素の数。
スペースで分離された第2ラインnは整数、。
整数Tの3行目は、とを達成することを約束します。
出力フォーマット
入力の順に配置された出力線の数、溶液の各出力セット、すなわち、選択された数があります。
溶液の複数設定した場合、優先出力は、N個の整数を含まない;含有又は含有しない場合、優先的に等最初の出力N-1の整数を含み、ありません。
プログラム出力の合計数の最後の行。
サンプル入力
5
-7 -3 -2 5 9
0
サンプル出力
-3 -2 5
-7 -2 9
2
スケールデータと規則
1 <= N - <= 22ではありません
Tは<= maxlongintが
長い範囲を超えない任意の要素を設定して
#include <stdio.h>
int n;
long long int a[25];
long long int T;
long long int current_sum;
long long int chosen[25];
int size_chosen;
long long int num_solutions;
void search(int idx)
{
if (idx < 0)
{
if (current_sum == T && size_chosen)
{
num_solutions++;
for (int i = size_chosen - 1; i >= 0; --i)
printf("%lld ", chosen[i]);
printf("\n");
}
return;
}
search(idx - 1);
current_sum += a[idx];
chosen[size_chosen++] = a[idx];
search(idx - 1);
size_chosen--;
current_sum -= a[idx];
}
int main()
{
scanf("%d", &n);
for (int i = 0; i < n; ++i)
scanf("%lld", &a[i]);
scanf("%lld", &T);
current_sum = 0;
size_chosen = 0;
num_solutions = 0;
search(n-1);
printf("%lld", num_solutions);
return 0;
}