比赛 搜索题... 评测结果 AAAAAAAAAA
题目名称 分组 最终得分 100
用户昵称 fyb 运行时间 0.027 s
代码语言 C++ 内存使用 0.26 MiB
提交时间 2014-11-04 20:13:13
显示代码纯文本
#include <stdio.h>

#define NMAX 20
#define MMAX 10

int n,m;

int rec[MMAX];

int gnum(int ind,int l,int min){
	int num=0;
	int i;

	if(l<min)return 0;
	if(ind==m){
//		rec[ind-1]=l;
//		for(i=0;i<m;i++)
//			printf("%d ",rec[i]);
//		putchar('\n');
		return 1;
	}
	for(i=min;i<=n-ind;i++){
		rec[ind-1]=i;
		num+=gnum(ind+1,l-i,i);
	}
	return num;
}

void gprt(int ind,int l,int min){
	int num=0;
	int i;

	if(l<min)return;
	if(ind==m){
		rec[ind-1]=l;
		for(i=0;i<m;i++)
			printf("%d ",rec[i]);
		putchar('\n');
		return;
	}
	for(i=min;i<=n-ind;i++){
		rec[ind-1]=i;
		gprt(ind+1,l-i,i);
	}
}

int main(){
	int i;

	freopen("dataa.in","r",stdin);
	freopen("dataa.out","w",stdout);

	scanf("%d%d",&n,&m);
	printf("%d\n",gnum(1,n,1));
	gprt(1,n,1);
	return 0;
}