鸣人的影分身(等级考试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; }