#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。現在把問題交給你,你能不能也很快的找出所有和...