poj 1664 放苹果【M的N划分】
生活随笔
收集整理的這篇文章主要介紹了
poj 1664 放苹果【M的N划分】
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?放蘋果
Description
把M個同樣的蘋果放在N個同樣的盤子里,允許有的盤子空著不放,問共有多少種不同的分法?(用K表示)5,1,1和1,5,1 是同一種分法。Input
第一行是測試數據的數目t(0 <= t <= 20)。以下每行均包含二個整數M和N,以空格分開。1<=M,N<=10。Output
對輸入的每組數據M和N,用一行輸出相應的K。Sample Input
1 7 3Sample Output
8題目鏈接:http://poj.org/problem?id=1664 【解題思路】
設f(m,n)為把m個蘋果放到n個盤子中的方法數,m>=0,n>=0.
? ? ? ? ? ? ?若 m < n 則 f(m,n) = f(m,m)。即空哪幾個盤子都是一樣的
? ? ? ? ? ? ?若 m>=n 則 大體有兩種放法:
? ? ? ? ? ? ? ? ? ? 第1種情況:至少有一個盤子為空,即什么也不放,這部分的方法數為f(m,n-1);
? ? ? ? ? ? ? ? ? ? 第2種情況:全部盤子都有蘋果,那么先從m個蘋果中抽取出n個出來,各個盤子分一個,考慮剩下的m-n個蘋果放到n個盤子里的放法,這樣就成功把f(m,n)降到了f(m-n,n)。 ? ? ? ? ?
? ? ? ? ? ? ? ? ? ??所以,m>=n時,有f(m,n) = f(m,n-1) + f(m-n,n);
AC代碼: 1 #include<stdio.h> 2 int f(int x,int y) 3 { 4 if(y==1||x==0) return 1;//盤子數為1,或者沒有蘋果了 5 if(x<y) return f(x,x);//蘋果數小于盤子的數目時 6 return f(x,y-1)+f(x-y,y);//至少一個盤子為空或者每個盤子都放了蘋果 7 } 8 9 int main() 10 { 11 int t,m,n,i; 12 scanf("%d",&t); 13 for(i=0;i<t;i++) 14 { 15 scanf("%d%d",&m,&n); 16 printf("%d\n",f(m,n)); 17 } 18 return 0; 19 }轉載于:https://www.cnblogs.com/123tang/p/5784803.html
總結
以上是生活随笔為你收集整理的poj 1664 放苹果【M的N划分】的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 关于iframe嵌套、动态获取ifram
- 下一篇: 零基础建站第一季视频分享