單點時限: 2.0 sec
記憶體限制: 256 mb
整數拆分是把乙個正整數(簡稱為和數)拆分為乙個或若干個指定正整數(簡稱為零數,通常不區別式中各零數的排列順序)之和,這是乙個有趣的計算問題。通常拆分式中的零數有重複和不重複(即拆分式中各零數互不相同)兩種情況。
如果我們打算將乙個給定的正整數 n (n≤50)拆分為若干個不重複的正整數(a1+a2+⋯ai,i≥1)之和,其中每個零數的取值不大於給定的正整數 m (m≤20),即 1≤ai≤m,請問共有多少種不同的拆分方案。
輸入格式
第 1 行:乙個整數 t (1≤t≤10) 為問題數。
接下來共 t 行整數,每行對應 1 個問題,包含用乙個空格隔開的兩個正整數,分別表示 n (n≤50) 和m (m≤20)。
輸出格式
對於每個問題,輸出一行問題的編號(0 開始編號,格式:case #0: 等)。
然後對應每個問題在一行中輸出正整數 n 的拆分方案數。
樣例input
36 4
20 8
50 20
output
case #0:
2case #1:
13case #2:
1969
/*
思路:dfs
從1到m選擇幾個數使其和為n,每個數選和不選兩種狀態
*/#include
using
namespace std;
int n,m;
int ans=0;
void
dfs(
int i,
int sum)
if(i>m||sum>n)
return
;dfs
(i+1
,sum+i)
;dfs
(i+1
,sum);}
intmain()
return0;
}
再談大於指定正整數的最小「不重複數」問題
對於 大於指定正整數的最小 不重複數 問題 最初,在 演算法 求比指定數大且最小的 不重複數 問題的高效實現 中,我給出了乙個遞迴寫法,之後在同一篇博文中給出了乙個非遞迴寫法。中對我的寫法進行了更詳細的說明,並進行了重要改進。使之適合範圍更大。在 評playerc的 求比指定數大且最小的 不重複數 ...
再談大於指定正整數的最小「不重複數」問題
對於 大於指定正整數的最小 不重複數 問題 最初,在 演算法 求比指定數大且最小的 不重複數 問題的高效實現 中,我給出了乙個遞迴寫法,之後在同一篇博文中給出了乙個非遞迴寫法。中對我的寫法進行了更詳細的說明,並進行了重要改進。使之適合範圍更大。在 評playerc的 求比指定數大且最小的 不重複數 ...
提取不重複的整數
題目描述 輸入乙個 int 型整數,按照從右向左的閱讀順序,返回乙個不含重複數字的新的整數。輸入描述 輸入乙個 int 型整數。輸出描述 按照從右向左的閱讀順序,返回乙個不含重複數字的新的整數。示例1 輸入 9876673 輸出 37689 示例 1 網頁 ok linux 也 ok linux 編...