問題描述
從乙個大小為n的整數集中選取一些元素,使得它們的和等於給定的值t。每個元素限選一次,不能乙個都不選。
輸入格式
第一行乙個正整數n,表示整數集內元素的個數。
第二行n個整數,用空格隔開。
第三行乙個整數t,表示要達到的和。
輸出格式
輸出有若干行,每行輸出一組解,即所選取的數字,按照輸入中的順序排列。
若有多組解,優先輸出不包含第n個整數的;若都包含或都不包含,優先輸出不包含第n-1個整數的,依次類推。
最後一行輸出總方案數。
樣例輸入5
-7 -3 -2 5 9 0
樣例輸出
-3 -2 5
-7 -2 9 2
資料規模和約定
1<=n<=22
t<=maxlongint
集合中任意元素的和都不超過long的範圍
這個題就是簡單的回溯法,每個數要麼選要麼不選,解的結構就是一顆二叉樹,由於n<=22,時間複雜性也不高。
#include using namespace std;
int visited[22];//用來記錄節點是否被訪問過
int seq[22];//用來盛放序列
int n,ans,cnt=0;//n表元素個數,ans是結果,cnt是結果的個數
void backtrack(int t)//因為題目要求先輸出不包含第n個元素的所以陣列要倒著遍歷
{ if(t<0)
{ int sum=0,sumofv=0;
for(int i=0;i>n;
for(int i=0;i>seq[i];
cin>>ans;
backtrack(n-1);
cout<
演算法訓練 和為T
問題描述 從乙個大小為n的整數集中選取一些元素,使得它們的和等於給定的值t。每個元素限選一次,不能乙個都不選。輸入格式 第一行乙個正整數n,表示整數集內元素的個數。第二行n個整數,用空格隔開。第三行乙個整數t,表示要達到的和。輸出格式 輸出有若干行,每行輸出一組解,即所選取的數字,按照輸入中的順序排...
演算法訓練 和為T
題目鏈結 問題描述 從乙個大小為n的整數集中選取一些元素,使得它們的和等於給定的值t。每個元素限選一次,不能乙個都不選。include using namespace std long long a 25 select 22 cnt,res,n void solve int cur,long lon...
演算法訓練 和為T (90分)
問題描述 從乙個大小為n的整數集中選取一些元素,使得它們的和等於給定的值t。每個元素限選一次,不能乙個都不選。輸入格式 第一行乙個正整數n,表示整數集內元素的個數。第二行n個整數,用空格隔開。第三行乙個整數t,表示要達到的和。輸出格式 輸出有若干行,每行輸出一組解,即所選取的數字,按照輸入中的順序排...