2010 年中興面試題
程式設計求解:
輸入兩個整數n 和m,從數列1,2,3.......n 中隨意取幾個數,
使其和等於m ,要求將其中所有的可能組合列出來。
邏輯分析:
2、問題其實本質上就是0/1揹包問題,對於每乙個n,我們採用貪婪策略,先考察是否取n,如果取n,那麼子問題就變成了find(n-1,m-n),而如果捨棄n,子問題則為find(n-1,m)。至此,我們利用dp思想找到了遞迴式(很多時候,所謂動態規劃,貪婪只是一念之差)。
3、那麼,如何制定解的判定策略?我們知道,遞迴需要邊界條件,而針對揹包問題,邊界條件只有兩種,如果n<1或者m<1,那麼便相當於「溢位」,無法combo出m,而另一種可能就是在剩餘的n個里恰好滿足m==n,即此時 揹包剛好填充滿,輸出一組解單元。除此之外,再無其他。
c原始碼:
尋找和為定值的多個數
程式設計求解 輸入兩個整數 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 對應的 語句就...
github july 尋找和為定值的多個數
輸入兩個整數n和sum,從數列1,2,3.n 中隨意取幾個數,使其和等於sum,要求將其中所有的可能組合列出來。解法 類揹包問題 遞迴問題 可以看出這是關於0 1揹包問題,可以將問題定義為f n,m 從1 n中選擇多個數,使得之和為m 那麼 1 選取n,則剩下從n 1個數中選擇和為m n的數,即求f...