牛客網 和為sum的所有組合方案

2021-09-01 17:54:17 字數 961 閱讀 4998

#include#include#include#include#includeusing namespace std;

/*********** 題目描述:

輸入兩個整數 n 和 m,從數列1,2,3.......n 中隨意取幾個數,使其和等於 m ,要求將其中所有的可能組合列出來

************/

/******************** 分析思路: 採用深度優先搜尋,一旦搜尋到滿足條件的組合,就輸出 ********************/

int n, m, *a;

vectorst; // 儲存當前搜尋方案的數字棧

// next_index: the next index to search the array

// cur_sum: 當前已經湊好的數值

// 為了剪紙,壓縮搜尋空間,設定 failure 表示當前搜尋是否成功

bool failure = false;

bool dfs(int next_index, int cur_sum)

else if (cur_sum + a[next_index] == m) // 因為已經公升序排列了,所以後面的肯定不會滿足要求,直接pass,剪枝

st.push_back(a[next_index]);

cur_sum += a[next_index];

// step 2: 確定下一步的搜尋

for (int i = next_index + 1; i < n; i++)

dfs(i, cur_sum);

// step 3: 替換掉當前這個

st.erase(st.end() - 1);

cur_sum -= a[next_index];

return false;

}int main(int argc, char * argv)

牛客網 數字和為sum的方法

題目描述 給定乙個有n個正整數的陣列a和乙個整數sum,求選擇陣列a中部分數字和為sum的方案數。當兩種選取方案有乙個數字的下標不一樣,我們就認為是不同的組成方案。輸入描述 輸入為兩行 第一行為兩個正整數n 1 n 1000 sum 1 sum 1000 第二行為n個正整數ai,以空格隔開。輸出描述...

牛客 數字和為sum的方法數(滴滴筆試)

程式設計題 數字和為sum的方法數 給定乙個有n個正整數的陣列a和乙個整數sum,求選擇陣列a中部分數字和為sum的方案數。當兩種選取方案有乙個數字的下標不一樣,我們就認為是不同的組成方案。輸入描述 輸入為兩行 第一行為兩個正整數n 1 n 1000 sum 1 sum 1000 第二行為n個正整數...

牛客網 和為S的連續正數序列

小明很喜歡數學,有一天他在做數學作業時,要求計算出9 16的和,他馬上就寫出了正確答案是100。但是他並不滿足於此,他在想究竟有多少種連續的正數序列的和為100 至少包括兩個數 沒多久,他就得到另一組連續正數和為100的序列 18,19,20,21,22。現在把問題交給你,你能不能也很快的找出所有和...