子集和問題

2021-06-04 12:24:41 字數 1007 閱讀 2270

題目描述:子集和問題的乙個例項為〈s,t〉。其中,s=是乙個正整數的集合,c是乙個正整數。子集和問題判定是否存在s的乙個子集s1,使得s1中的各元素之和等於c。

----題目出自《計算機演算法設計與分析  第3版》 王曉東

思路:用回溯法解這道題,我本來想修改排列樹使之可以求出乙個集合的所有子集。但是分析了一下,時間複雜度比求全排列並沒有多少減少。所以就直接求出全排列來解除此題。(想通了,求子集應該用子集樹來解決)

注:這個題用子集樹解更簡單,時間複雜度更低。類似於0-1揹包的回溯法。

**如下:

#include #include #define max 1000

//global variables

int n=0;//the number of numbers

int c=0;//the sum of the subset

int num[max]=;

int count=1;//the number of the element in a subset

int result[max]=; //the answer of this question

int c_sum=0;//current sum

//prototypes

void swap(int &a,int &b);

void back_subset(int i);

int main()

void back_subset(int i)

if(i>n)

return ;

if(c_sum+num[i]>c)

return;

for(int j=i;j<=n;j++) }

void swap(int &a,int &b)

總結: 

1.遺留乙個問題:如何求出乙個集合的所有子集?   問題已經解決:用子集樹來求解。這是乙個很典型的子集樹問題

2.加深了我對遞迴退出條件的邏輯順序的理解。

子集和問題

問題描述 子集和問題的乙個實力為。其中,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,並列出表示式 並且要求表示式不相同。若表示式中的元素相同則表示式就相同,...

子集和問題

問題描述 給定乙個集合和乙個正整數c,判定是否存在該集和的子集,使其所有元素的和等於給定的正整數c?思路 利用二進位制,設集和中的某個數,0代表該數沒被選中,1代表該數被選中。則長度為n的集和,有2 n種選擇。通過for迴圈從0到n 1,集和中被選中的數相加,結果與正整數c相等,輸出該子集和。inc...