程序設計實驗題5.3 瓜分車釐子

程序設計語言綜合設計實驗題5.3 瓜分車釐子

★實驗任務

你們必定小時候都作過不少奇奇怪怪的分水果的題目,好比7個小朋友分3個蘋果,切4刀怎麼分比較合理。c++

然而咱們今天要分的是車釐子,天然不可能把車釐子切開來分。事實上,負責分配車釐子的Gyy也很隨意,他只要能把給定的n個車釐子分紅k份就能夠了,根本不在意誰多誰少,請幫忙Gyy算一下,一共會有多少種分配方案。請注意,每份不能爲空,若是一種分法可以經過調換順序變成另外一種,那麼認爲他們是相同的,好比:spa

1,1,8;8,1,1;1,8,1;這三種分法視爲同一種方案。設計

★輸入格式

輸入共一行,給出兩個整數n,k,其中6<n≤200,2≤k≤6。code

★輸出格式

輸出共一行,即不一樣的分法的方案數。ci

★輸入樣例

7 3it

★輸出樣例

4程序設計

★Hint

四種分法爲:1,1,5; 1,2,4; 1,3,3; 2,2,3。搜索

思路:本題的數據範圍很小,直接用搜索就能AC,時間複雜度O(n^k)。
但若是數據範圍稍微增大一些,顯然搜索就會超時!
所以能夠用一種巧妙的dp作法解決此問題。
狀態表示:dp[i][j]表示將i個車釐子分紅j個的方法數。
狀態轉移:咕咕咕。
代碼:程序

#include<bits/stdc++.h> 
#include<queue>
using namespace std;

int dp[200][10];

int main(){
    int n,k;
    cin>>n>>k;
    for (int i=1; i<=n; i++)
        for (int j=1; j<=i; j++){
            if (j==1 || j==i) dp[i][j]=1;
            else dp[i][j]=dp[i-1][j-1]+dp[i-j][j];
        }
    printf("%d",dp[n][k]);
    return 0;
}
相關文章
相關標籤/搜索