1. 程式人生 > >nyoj_176_整數劃分(二)_201404261715

nyoj_176_整數劃分(二)_201404261715

 1 #include <stdio.h>
 2 int f(int m,int n)
 3 {
 4     if(m==n||n==1)
 5     return 1;
 6     else if(m<n)
 7     return 0;
 8     else if(m>n)
 9     return f(m-1,n-1)+f(m-n,n);
10 }
11 int main()
12 {
13     int T;
14     scanf("%d",&T);
15     while(T--)
16     {
17
int m,n; 18 scanf("%d%d",&m,&n); 19 printf("%d\n",f(m,n)); 20 } 21 return 0; 22 } 23 //AC 24 //首先 定義f ( i , j )為整數 i 分成 j 個整數 的情況 25 //經過分析可得f(i, j )可轉化為兩個部分: 26 //一: 假設 分成的 j 個整數中 不包含1。。那麼 此時 f (i-j,j)就是這部分的總情況,既然想讓他不包含1,就先將j個整數都分為1,此時i變為i-j,再將i分為j個整數,這j個整數再加上原先分的1,就肯定不會再有1出現了。如果i-j<j的話,f (i-j,j)的值為0
27 //二: 假設分成的j個整數至少有一個1。。那麼此時f(i-1,j-1) 28 // 29