time limit:1 ms|
memory limit:128 mb
difficulty:2
輸入自然數n,然後將其拆分成由若干數相加的形式,參與加法運算的數可以重複。
輸入只有乙個整數n,表示待拆分的自然數n。 n<=80
輸出乙個數,即所有方案數 7
14解釋:
輸入7,則7拆分的結果是
7=1+6
7=1+1+5
7=1+1+1+4
7=1+1+1+1+3
7=1+1+1+1+1+2
7=1+1+1+1+1+1+1
7=1+1+1+2+2
7=1+1+2+3
7=1+2+4
7=1+2+2+2
7=1+3+3
7=2+5
7=2+2+3
7=3+4
一共有14種情況,所以輸出14
思路:用temp[i][j] 表示i 劃分成最大數為j的數相加的組合數, 求temp[i][j] 可分為三種情況:
1, i = 1或j = 1 時 temp[i][j] = 1 (將1分成n份或將n分成1份只有一種情況)
2,當i < j 時, temp[i][j]和temp[i][i]相同
3, 當i = j 時, temp[i][j] 比 temp[i][j-1] 多了 j 這一種組合
4, 當i > j 時, tmep[i][j] = temp[i][j-1](不含j的組合) + temp[i-j][j](含j的組合)
#include #include #include #define max 500
int temp[max][max];
void fun()
else if(i < j)
else if(i == j)
else if(i > j)}}
}int main()
return 0;
}
自然數拆分
描述 description 輸入自然數n,然後將其拆分成由若干數相加的形式,參與加法運算的數可以重複。輸入格式 inputformat 輸入只有乙個整數n,表示待拆分的自然數n。n 80 輸出格式 outputformat 輸出乙個數,即所有方案數 樣例輸入 sampleinput 複製資料 7 ...
自然數拆分
問題描述 自然數的拆分 任何乙個大於1的自然數n,總可以拆分成若干個自然數之和,並且有多種拆分方法。試求 n的所有拆分。例如自然數5,可以有如下一些拆分方法 5 1 1 1 1 1 5 1 1 1 2 5 1 2 2 5 1 4 5 2 3 注意,本題中n拆分出來的數x的範圍是1 x整數劃分可以參考...
自然數拆分
題目 給出sum min max和n四個正整數,請輸出所有將sum拆分為n個遞增的正整數 允許相等 之和,其中每個正整數k都滿足 min k max。在少俠的部落格 看到這道題 就隨手做了下。該題與輸出n個數取m個數的所有組合類似,只不過限定了m個數的和以及取值範圍。可以先用貪心演算法構造乙個最小的...