演算法訓練 和為T

2021-07-28 09:04:08 字數 873 閱讀 6134

問題描述

從乙個大小為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,表示要達到的和。輸出格式 輸出有若干行,每行輸出一組解,即所選取的數字,按照輸入中的順序排...