鸣人的影分身(等级考试4级 2021-03 T3)

题目:

 

此题题干又臭又长,直接看简化版。

鸣人的影分身(等级考试4级 2021-03 T3)等效于 把m个苹果分到n个盘子中,问有几种可能?

dp[i][j]表示有i个盘子j个苹果时有多少种放法。

用递归的方法来计算dp[n][m]。

 

一、递归函数的出口

 

    (1)盘子数量不断减少所以当n==1时return 1;

 

     (2)苹果数量不断减少所以当m==0时retrun 1;

 

 

二、函数主体

  n > m

    这个好办,此时至少有m - n 个盘子空着那么相当于把m个苹果放入m个盘子。——return dp[n][m]=dp[m][m];

  n <= m

    这个稍微复杂一些需要分类讨论

      (一).   至少有一个盘子是空的

          等于把m个苹果放入n - 1 个盘子中及其迭代。——return dp[n-1][m]

      (二).   当每个盘子都有时就是return dp[n][m-n]

 

 

综上两种情况(一)(二)return dp[n][m]=dp[n][m-n]+dp[n-1][m];

照着上面思路即可写出 ......

 代码君🐱‍👤:

#include<bits/stdc++.h>
using namespace std;
int f(int n,int m)
{
    if(n==1||m==0) return 1;
    if(n>m)
    {
        return f(m,m);
    }
    else
    {
        return f(n,m-n)+f(n-1,m);
    }
}
int main()
{
    int k;
    cin>>k;
    for(int i=1;i<=k;i++)
    {
        int a,b;
        scanf("%d%d",&a,&b);
        cout<<f(b,a)<<endl;
    }
    return 0;
}

 

posted @ 2022-02-27 14:57  王浩泽  阅读(104)  评论(0编辑  收藏  举报