比赛 NOIP2015普及组练习 评测结果 C
题目名称 分组 最终得分 0
用户昵称 sxysxy 运行时间 0.000 s
代码语言 C++ 内存使用 0.00 MiB
提交时间 2015-11-06 20:02:28
显示代码纯文本
#include <cstdio>
#include <cstdlib>
#include <iostream>
//咦,泥萌确定这个不是数的划分那个题么?

int note[21][11][21];
int dfs(int n, int m, int f)
{
	int i,q = 0;
	if(note[n][m][f])return note[n][m][f];
	if(m == 1)return note[n][m][f] = 1;
	for(i = f; i <= n/m; i++)
	{
		q += dfs(n-i, m-1, i);
	}	
	return note[n][m][f] = q;
} 

int a[21];
int M;
bool vis[21];

void p_m(int cur, int sy)
{
	int i;
	
	if(cur == M && sy == 0)
	{
		for(i = 1; i < M; i++)
		{
			putchar(a[i]+'0');
			putchar(' ');
		}
		putchar('\n');
		return;
	}else
	{
		for(i = 1; i <= sy; i++)
		{
			if(i >= a[cur-1])
			{
				a[cur] = i;
				p_m(cur+1, sy-i);
				a[cur] = 0;
			}
		}
	}
}

int main()
{
	freopen("dataa.in", "r", stdin);
	freopen("dataa.out", "w", stdout);
	int n,m;
	scanf("%d %d", &n, &m);
	M = m+1;
	printf("%d\n",dfs(n,m,1));
	memset(vis, false, sizeof(vis));
	p_m(1,n);
	return 0;
}