首页 > 其他分享 >放苹果 - 题解

放苹果 - 题解

时间:2024-07-29 23:39:38浏览次数:13  
标签:last int 题解 namespace 苹果 ans include

时间限制:C/C++ 1000MS,其他语言 2000MS
内存限制:C/C++ 256MB,其他语言 512MB

描述

把 \(M\) 个同样的苹果放在 \(N\) 个同样的盘子里,允许有的盘子空着不放,问共有多少种不同的分法?(用K表示)\(5,1,1\) 和 \(1,5,1\) 是同一种分法。

输入描述

第一行是测试数据的数目 \(t\)(\(0≤t≤20\))。
以下每行均包含二个整数 \(M\) 和 \(N\),以空格分开。\(1≤M,N≤10\)。

输出描述

对输入的每组数据 \(M\) 和 \(N\),用一行输出相应的 \(K\)。

用例输入 1

1
7 3

用例输出 1

8

提示

代码

递归 做法

#include<cstdio>
using namespace std;

int ans=0;
void solve(int m,int n,int p,int last)
{
	if(m<0) return;
	if(p==n)
	{
		if(m>=last) ans++;
	}
	else
	{
		for(int i=last;i<=m;i++)
			solve(m-i,n,p+1,i);
	}
	return;
}
int main()
{
	int t;
	scanf("%d",&t);
	while(t--)
	{
		int m,n;
		scanf("%d%d",&m,&n);
		ans=0;
		solve(m,n,1,0);
		printf("%d\n",ans);
	}
	return 0;
}

动态规划 做法

#include<cstdio>
#include<cstring>
using namespace std;

const int M=15,N=15;
int T,m,n,f[M][N];

int main()
{
	scanf("%d",&T);
	while(T--)
	{
		scanf("%d%d",&m,&n);
		memset(f,0,sizeof(f));
		for(int i=1;i<=m;i++) f[i][1]=1;
		for(int i=1;i<=n;i++) f[0][i]=f[1][i]=1;
		for(int i=2;i<=m;i++)
			for(int j=2;j<=n;j++)
			{
				if(i>=j) f[i][j]=f[i][j-1]+f[i-j][j];
				else f[i][j]=f[i][i];
			}
		printf("%d\n",f[m][n]);
	}
	return 0;
}

标签:last,int,题解,namespace,苹果,ans,include
From: https://www.cnblogs.com/jerrycyx/p/18331308

相关文章

  • 【入门】统计每个月兔子的总数 - 题解
    【入门】统计每个月兔子的总数时间限制:C/C++1000MS,其他语言2000MS内存限制:C/C++16MB,其他语言32MB描述有一对兔子,从出生后第3个月起每个月都生一对兔子,一对小兔子长到第三个月后每个月又生一对兔子,假如兔子都不死,问第\(n\)个月(\(n<=50\))的兔子总数为多少对?输入描述......
  • 排序 - 题解
    排序时间限制:C/C++1000MS,其他语言2000MS内存限制:C/C++64MB,其他语言128MB描述给定你一个长度为\(n\)的整数数列。请你使用任意排序对这个数列按照从小到大进行排序。并将排好序的数列按顺序输出。数据范围\(1≤n≤100000\)禁止使用sort函数输入描述输入共两......
  • 逆序对的数量 - 题解
    逆序对的数量时间限制:C/C++1000MS,其他语言2000MS内存限制:C/C++64MB,其他语言128MB描述给定一个长度为\(n\)的整数数列,请你计算数列中的逆序对的数量。逆序对的定义如下:对于数列的第\(i\)个和第\(j\)个元素,如果满足\(i<j\)且\(a[i]>a[j]\),则其为一个逆序对;否则......
  • 求第k小的数 - 题解
    求第k小的数时间限制:C/C++1500MS,其他语言3000MS内存限制:C/C++256MB,其他语言512MB描述输入\(n\)个数字,输出这些数字的第\(k\)小的数。最小的数是第\(0\)小。输入描述第一行包含两个整数\(n(1≤n≤5000000)\)和\(k(0≤k<n)\)。输出描述1个整数(所有整数均在......
  • 最大子段和 - 题解
    最大子段和时间限制:C/C++1000MS,其他语言2000MS内存限制:C/C++128MB,其他语言256MB描述给出一个长度为\(n\)的序列\(a\),选出其中连续且非空的一段使得这段和最大。输入描述第一行是一个整数,表示序列的长度\(n\)。第二行有\(n\)个整数,第\(i\)个整数表示序列的第......
  • 数二数 题解
    我们定义\(f_i\)表示考虑\(n=i\)时的答案。考虑怎样才能使得Bob存在一种出题方案使得\(l\)与\(r\)无法确定。假设包含点\(i\)的询问集合为\(S_i\),那么当\(S_l=S_r\)时\(l\)与\(r\)无法确定。发现:如果\(a<b<c<d\),\(S_a=S_c\),\(S_b=S_d\),那么\(S_a=S_b=S_c=......
  • P8314 Parkovi 题解
    题意:树,边有边权,求一种选出\(k\)个点染色的方案,使得每个点到最近的一个被染色点的距离的最大值最小,\(n\le2\cdot10^5\).Solution先看部分分:\(n\le20\):直接\(C_n^k\)爆搜.\(k=1\):对每个点\(u\)求出\(f(u)\)和\(g(u)\)分别表示\(u\)到子树内点距离的最大值、\(u\)......
  • luogu P2371 [国家集训队] 墨墨的等式 题解
    luoguP2371[国家集训队]墨墨的等式题目传送门思路同余最短路同余最短路同余最短路与差分约束有异曲同工之妙,都将约束条件转化为边,每种状态转化为点。把本来与图论毫不相干的问题抽象到具体的图上,通过拓扑排序,最短路等基础算法获得最小状态,从而解决问题。在本题中,以\(0\)......
  • vue3中使用keepAlive缓存路由组件不生效的问题解决
    在Vue3中使用keep-alive缓存路由组件时,可能会遇到一些问题导致缓存不生效。以下是一些常见的问题及其解决方案:keep-alive写法错误:在Vue3中,使用keep-alive需要将router-view包裹在keep-alive中,并通过插槽传递组件。例如:<template><router-viewv-slot="{Co......
  • CF1523D Love-Hate 题解
    CF1523DLove-Hate题解传送门题目大意:给定\(m\)和\(n\)个集合,而且这\(n\)个集合的元素都是\(1\)~\(m\)中的数且没有重复,而且大小都不超过\(15\)。求一个最大的集合,使得这个集合是至少\(\left\lceil\frac{n}{2}\right\rceil\)个集合的子集。先想一个问题:题目是让......