| 比赛 | 
    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;
}