全組合 動態規劃

2021-06-06 05:42:24 字數 735 閱讀 1544

#include#include#includeusing namespace std;

vectorresult;

int hashtable[26]=;

bool flag=false;

int main()

{ string a;

cin>>a;

int len=a.length();

int i;

for(i=0;i::iterator p= result.begin();

for(p;p!=result.end();p++)

cout<<*p<

策略:使用動態規劃。逐個字母地訪問。用乙個vector儲存到目前為止可能的組合。比如對於a,b, c 輸入序列。動態規劃的結果是

1. a

2. a,   ab,  b

3. a,   ab,  b,  ac,  abc,  bc, c

通過模擬,我們應該能發現,若輸入序列為abcc(即輸入序列中含有相同的字母,則這種方法會答應出重複的組合)。採取的方法是:建立乙個hash表,記錄輸入序列中每個單詞出現的次數。比如對於第二個c,此時c出現的次數已經為1.則只需新增動態規劃中含有c一次的那些組合。

1. a

2. a,   ab,  b

3. a,   ab,  b,  ac,  abc,  bc, c

4. a,   ab,  b,  ac,  abc,  bc, c, acc, abcc, bcc, cc

Java實現全組合

abs 的all combination is abc,a,b,c,ab,ac,bc 2 n 1次 public class combination system.out.println system.out.println result num is nbit 1 public static vo...

演算法22 全組合

給定乙個陣列,輸出其全組合 例如 123 輸出 1,2,3,12,13,23,123 解法一 對於n位資料,考慮每一位對於組合結果的影響,對於每一位可以選擇取或者不取。一共有power 2,n 中取法,當全部不取時,對於最後結果沒有意義,因此最終取法共有power 2,n 1.可以利用二進位制數字從...

遞迴學習 組合 全組合排列

sample input 1 2 3 sample output include using namespace std const int len 10 int n int mat len int result len bool used len 初始值為false,表示都沒有使用過 void s...