现在的位置: 首页 > 综合 > 正文

POJ-1664(放苹果)

2013年01月30日 ⁄ 综合 ⁄ 共 818字 ⁄ 字号 评论关闭

最基本的组合数学的题目我却墨迹了半天,十分的没有效率。

不知道怎么办了都,一定要提高效率,要不然真的不行。

放苹果
Time Limit: 1000MS   Memory Limit: 10000K
Total Submissions: 23439   Accepted: 14873

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

	#include <stdio.h>
	#include <string.h>
	#include <iostream>
	#include <string>
	
	
	using namespace std;
	
	int f[11][11];
	
	void init()
	{
		memset(f, 0, sizeof(f));
		for (int i = 0; i < 12; i++)
		{
			for (int j = 1; j < 12; j++)
			{
				if (i == 0 || j == 1)
				{
					f[i][j] = 1;
					continue;
				}
				if (i >= j)
				{
					f[i][j] = f[i][j - 1] + f[i - j][j];
				}
				else
				{
					f[i][j] = f[i][i];
				}
			}
		}
	}
	
	int fun(int m, int n)
	{
		if (n == 1 || m == 0)
		{
			return 1;
		}
		if (m < n)
		{
			return fun(m, m);
		}
		else
		{
			return fun(m, n - 1) + fun(m - n, n);
		}
		
	}
	
	int main()
	{
		int T;
		int M, N;
		init();
		scanf("%d", &T);
		while (T--)
		{
			scanf("%d%d", &M, &N);
			printf("%d\n", f[M][N]);
		}
		return 0;
	}

抱歉!评论已关闭.