輸入兩個整數n和sum,從數列1,2,3.......n 中隨意取幾個數,使其和等於sum,要求將其中所有的可能組合列出來。
解法:類揹包問題(遞迴問題)
可以看出這是關於0-1揹包問題,可以將問題定義為f(n,m),從1->n中選擇多個數,使得之和為m
那麼(1)選取n,則剩下從n-1個數中選擇和為m-n的數,即求f(n-1,m-n)
( 2)不選取n,則從剩下的n-1個數中選擇和為m的數,即求f(n-1, m)
listnums;
void func(int n, int m)
{ if(n<=0 || m<=0)
return;
if(n == m)
{ for(list::iterator iter = nums.begin();iter!=nums.end();iter++)
cout<<*iter<<"+";
cout<
尋找和為定值的數
尋找和為定值的兩個數 include using namespace std include 排序夾逼 時間複雜度為o nlogn n o nlogn 空間複雜度 o 1 void twosum int a,unsigned int length,int sum else void funtest ...
尋找和為定值的多個數
程式設計求解 輸入兩個整數 n 和 m,從數列1,2,3.n 中 隨意取幾個數,使其和等於 m 要求將其中所有的可能組合列出來。include includeusing namespace std 全域性變數 listlist1 從1,2.n找到和為sum的數字 void find factor i...
尋找和為定值的多個數
輸入兩個整數n和sum,從數列1,2,3 n 中隨意取幾個數,使其和等於sum,要求將其中所有的可能組合列出來。注意到取n,和不取n個區別即可,考慮是否取第n個數的策略,可以轉化為乙個只和前n 1個數相關的問題。如果取第n個數,那麼問題就轉化為 取前n 1個數使得它們的和為sum n 對應的 語句就...