POJ1664——放苹果

放苹果

Time Limit: 1000MS   Memory Limit: 10000K
Total Submissions: 26595   Accepted: 16906

Description

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

Input

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

Output

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

Sample Input

1
7 3

Sample Output

8

Source

[email protected]

简单的dp题,设dp[i][j]表示把i个苹果放入j个盘子里的方案数,盘子允许有空

如果i 或者j为1,那么方案就是1,如果i < j,必然有空盘子,但是空哪几个是无所谓的,所以 此时dp[i][j] = dp[i][i];

如果i == j,那么方案就是把i个苹果放入j-1个盘子的方案再加上一种平摊的方案

如果i > j,要么至少有一个盘子空,要么都有(先拿出j个平摊到j个盘子,在考虑剩下的i-j个苹果)

#include <map>
#include <set>
#include <list>
#include <stack>
#include <queue>
#include <vector>
#include <cmath>
#include <cstdio>
#include <cstring>
#include <iostream>
#include <algorithm>  

using namespace std;

int dp[15][15];

int main()
{
	int t, m, n;
	memset ( dp, 0, sizeof(dp) );
	for (int i = 1; i <= 11; ++i)
	{
		for (int j = 1; j <= 11; ++j)
		{
			if (i == 1 || j == 1)
			{
				dp[i][j] = 1;
			}
			if (i < j)
			{
				dp[i][j] = dp[i][i];
			}
			else if (i == j)
			{
				dp[i][j] = dp[i][j - 1] + 1;
			}
			else
			{
				dp[i][j] = dp[i][j - 1] + dp[i - j][j];
			}
		}
	}
	scanf("%d", &t);
	while (t--)
	{
		scanf("%d%d", &m, &n);
		printf("%d\n", dp[m][n]);
	}
	return 0;
}
时间: 2024-11-06 03:54:50

POJ1664——放苹果的相关文章

poj1664 放苹果(递归)

转载请注明出处:http://blog.csdn.net/u012860063?viewmode=contents 题目链接:http://poj.org/problem?id=1664 Description 把M个同样的苹果放在N个同样的盘子里,允许有的盘子空着不放,问共有多少种不同的分法?(用K表示)5,1,1和1,5,1 是同一种分法. Input 第一行是测试数据的数目t(0 <= t <= 20).以下每行均包含二个整数M和N,以空格分开.1<=M,N<=10. Out

poj1664 放苹果(DPorDFS)&amp;&amp;系列突破(整数划分)

poj1664放苹果 Time Limit: 1000MS   Memory Limit: 10000K Total Submissions: 33661   Accepted: 20824 Description 把M个同样的苹果放在N个同样的盘子里,允许有的盘子空着不放,问共有多少种不同的分法?(用K表示)5,1,1和1,5,1 是同一种分法. Input 第一行是测试数据的数目t(0 <= t <= 20).以下每行均包含二个整数M和N,以空格分开.1<=M,N<=10. O

POJ1664 放苹果

#include <iostream> #include <cstdio> #include <cstring> using namespace std; int T,n,m; int solve(int m,int n){//m个苹果 n个盘子 if(m<=1||n<=1) return 1;//边界条件 if(m<n) return solve(m,m);//苹果比盘子少 等价于把m个苹果放入m个盘子的方案数 else return solve(m

洛谷 P2386 放苹果

P2386 放苹果 题目背景 (poj1664) 题目描述 把M个同样的苹果放在N个同样的盘子里,允许有的盘子空着不放,问共有多少种不同的分发(5,1,1和1,1,5是同一种方法) 输入输出格式 输入格式: 第一行是测试数据的数目t(0 <= t <= 20),以下每行均包括二个整数M和N,以空格分开.1<=M,N<=10 输出格式: 对输入的每组数据M和N,用一行输出相应的K. 输入输出样例 输入样例#1: 复制 1 7 3 输出样例#1: 复制 8 输入样例#2: 复制 1 7

【递归】放苹果

问题 : [递归]放苹果 题目描述 楚继光刚把油拿到厨房,老妈又大声喊道:“快去把苹果洗了放到盘子里去.” 楚继光要把M个同样的苹果放在N个同样的盘子里,允许有的盘子空着不放,问共有多少种不同的分法?(用K表示)5.1.1和1.5.1 是同一种分法. 输入 第1行为一个整数,表示测试数据的数目(测试数据的数目t(0 ≤ t ≤20),第2行为M和N(M和N,以空格分开.1≤M,N≤10). 输出 输出有多少种不同分法. 样例输入 1 7 3 样例输出 8 #include <iostream>

oj放苹果

题目描述 把M个同样的苹果放在N个同样的盘子里,允许有的盘子空着不放,问共有多少种不同的分法?(用K表示)5,1,1和1,5,1 是同一种分法. 输入 每个用例包含二个整数M和N.0<=m<=10,1<=n<=10.<=n<=10<=m<=10 样例输入 7 3 样例输出 8 分析: 假设对于m个苹果,n个盘子共有apple(m,n)种方法,那么要想办法递归将m,n的值减小,首先设置递归条件,当m<=1或者n<=1时,apple(m,n)=1:

放苹果(暴力)

放苹果 Time Limit: 1000MS   Memory Limit: 10000K Total Submissions: 33214   Accepted: 20600 Description 把M个同样的苹果放在N个同样的盘子里,允许有的盘子空着不放,问共有多少种不同的分法?(用K表示)5,1,1和1,5,1 是同一种分法. Input 第一行是测试数据的数目t(0 <= t <= 20).以下每行均包含二个整数M和N,以空格分开.1<=M,N<=10. Output 对

放苹果

描述 题目描述 把M个同样的苹果放在N个同样的盘子里,允许有的盘子空着不放,问共有多少种不同的分法?(用K表示)5,1,1和1,5,1 是同一种分法. 输入 每个用例包含二个整数M和N.0<=m<=10,1<=n<=10.<=n<=10<=m<=10 样例输入 7 3 样例输出 8 /** * 计算放苹果方法数目 * 输入值非法时返回-1 * 1 <= m,n <= 10<><= m,n <= 10<> * @

poj 1664 放苹果 递归

题目链接: http://poj.org/problem?id=1664 题目描述: 有n个苹果,m个盒子,盒子和苹果都没有顺序,盒子可以为空,问:有多少种放置方式? 解题思路: 当前有n个苹果,m个盒子. (1):假设当前最少的盒子放置一个苹果,则给m个盒子分别放一个苹果,剩下n-m个苹果. (2):假设当前最少的盒子不放苹果,则剩m-1个box,n个苹果. 代码: 1 #include <cstdio> 2 #include <cstring> 3 #include <c