子集和問題

2021-09-11 02:11:20 字數 1024 閱讀 2752

子集和問題的乙個例項為〈s,t〉。其中,s=是乙個正整數的集合,c是乙個正整數。子集和問題

判定是否存在s的乙個子集s1,使得子集s1和等於c。 設計乙個回溯法來求解該問題。

解題思路:對於該集合的每乙個子集,若元素和為正整數c,則將該子集放入解集中,最後返回解集即可。

/**

* @param list 存放所有滿足要求的解

* @param templist 存放每一輪的解

* @param nums 正整數集合

* @param target 目標和

* @param start 開始位置

* @param sum 每乙個子集和

*/public void backtrack(list> list, arraylisttemplist,

int nums, int target, int start, int sum)

for (int i=start; i> list = new arraylist<>();

arraylisttemplist = new arraylist<>();

backtrack(list, templist, s, target, 0, 0);

if (list.size() == 0)

system.out.println("no solution");

else

system.out.println(arrays.tostring(list.toarray()));

}

也可以省去backtrack函式中的引數sum。**如下:

public void backtrack(list> list, arraylisttemplist,

int nums, int target, int start)

for (int i=start; i非遞迴回溯法:

子集和問題

題目描述 子集和問題的乙個例項為 s,t 其中,s 是乙個正整數的集合,c是乙個正整數。子集和問題判定是否存在s的乙個子集s1,使得s1中的各元素之和等於c。題目出自 計算機演算法設計與分析 第3版 王曉東 思路 用回溯法解這道題,我本來想修改排列樹使之可以求出乙個集合的所有子集。但是分析了一下,時...

子集和問題

問題描述 子集和問題的乙個實力為。其中,s 是乙個正整數的集合,c是乙個正整數。判定是否存在s的乙個子集s1使得s1的和為c。輸入 輸入含多組測試用例!對每組測試用例,第一行有兩個正整數n和c,n表示s的大小,c是子集和的目標值。接下來的一行,有n個正整數 1 n 10000 表示集合s中的元素。當...

子集和問題

今天程式考試受挫,遂打算寒假空閒時間刷刷題,練練手感。今天有一題是這樣的,檔案 data.txt 有n 1行,每一行都為乙個正整數,第一行為n,剩餘n行為任意n個正整數。對於正整數m m 2 輸出m個數的和,要求和不大於100,並列出表示式 並且要求表示式不相同。若表示式中的元素相同則表示式就相同,...