Luogu 普及- (递归)

放苹果

题目描述

m 个同样的苹果放在 n 个同样的盘子里,允许有的盘子空着不放,问共有多少种不同的分法。(5,1,11,1,5 是同一种方法)

输入格式

第一行是测试数据的数目 t,以下每行均包括二个整数 mn,以空格分开。

输出格式

对输入的每组数据 mn,用一行输出相应的结果。

样例 #1

样例输入 #1

1
7 3

样例输出 #1

8

样例 #2

样例输入 #2

3
3 2
4 3
2 7

样例输出 #2

2
4
2

提示

对于所有数据,保证:1m,n100t20

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

vector<int>a;

int apple(int m,int n,int pre) {
	if(m==0 && n>0) return 0; //如果没有苹果 但是有盘子 +0 
	if(m>0 && n==1) {  //如果有苹果 同时盘子==1 
		if(m<pre) { //如果剩余苹果 比 上一次放置 数量少 
			return 0; // +0 
		}else{
			return 1; //如果有苹果 同时 盘子==1 同时  剩余苹果 比 上一次放置 数量少  +1
		}
	}
	int ans = 0;
	for(int i=pre; i<=m; i++) { //在当前盘子中可以放置 i 个苹果 
		a.push_back(i);
		ans+=apple(m-i,n-1,i);
		a.pop_back();
	}
	return ans;
}

int main() {
	int q;
	cin>>q;
	int m,n;
	while(q--) {
		cin>>m>>n;
		cout<<apple(m,n,0)<<endl;
	}
	return 0;
}
posted @   ppppppro  阅读(19)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 记一次.NET内存居高不下排查解决与启示
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了
· DeepSeek 开源周回顾「GitHub 热点速览」
点击右上角即可分享
微信分享提示