比赛 NOIP2015普及组练习 评测结果 AAAAAAAAAA
题目名称 分组 最终得分 100
用户昵称 阿狸 运行时间 0.017 s
代码语言 C++ 内存使用 0.86 MiB
提交时间 2015-11-03 20:04:21
显示代码纯文本
#include<iostream>
#include<cstdio>
#include<cmath>
#include<cstdlib>
#include<cstring>
#include<algorithm>
#include<string>
#include<queue>

using namespace std;

int m,n;
int a[10000][20];
int sum=0,ans=0;
int al[20]={1};

void dfs(int k)
{
	if(k==n+1&&sum==m)
	{
		ans++;
		for(int i=1;i<=n;++i)
			a[ans][i]=al[i];
	}
	if(sum+al[k-1]*(n-k+1)>m)
		return;
	for(int i=al[k-1];i<=m-sum;++i)
	{
		sum+=i;
		al[k]=i;
		dfs(k+1);
		sum-=i;
	}
}

void print()
{
	cout<<ans<<endl;
	for(int i=1;i<=ans;++i)
	{
		for(int j=1;j<n;++j)
			cout<<a[i][j]<<" ";
		cout<<a[i][n];
		cout<<endl;
	}
}

int main()
{
	freopen("dataa.in","r",stdin);
	freopen("dataa.out","w",stdout);
	cin>>m>>n;
	dfs(1);
	print();
	return 0;
}