当前位置:   article > 正文

分组_现在n个同学老师把他们分组做游戏,每组不少于3人,可以分多少组 编程

现在n个同学老师把他们分组做游戏,每组不少于3人,可以分多少组 编程

26. 分组

★   输入文件: dataa.in   输出文件: dataa.out    简单对比
时间限制:1 s   内存限制:128 MB
【问题描述】

现有 n 个学生, 要分成X1 ,X2 ,...,Xm ,共 m 组(m<=n,X1 ,X2 ,...,Xm 分别表示每组的学生人数),要求对于所有的i<j,Xi <=Xj ,共有多少种分组方案,求出分组方案。

【输入格式】

输入文件:dataa.in

只有一行:两个整数n,m(1<=n<=20 1<m<=10)

【输出格式】

输出文件:dataa.out

输出若干行,第一行是一个整数,表示分组方案数量.下面每行为一种分组方案,按字典序分组输出,每行的数与数之间用一个空格隔开。

【输入样例】

输入文件名: dataa.in

6 3

输出文件名: dataa.out


1 1 4 
1 2 3 
2 2 2 
 

简单搜索。。。但是。在上界的判断的时候出现了一点点失误,导致了1次错误。

  1. #include<cstdio>
  2. using namespace std;
  3. int num,n,m;
  4. int ans[1000][22];
  5. int temp[22];
  6. void dfs(int cur,int cnt,int last){
  7. if(cnt>n) return ;
  8. if(cur==m&&last<=(n-cnt)){
  9. num++;
  10. for(int i=1;i<m;i++)
  11. ans[num][i]=temp[i];
  12. ans[num][m]=n-cnt;
  13. return ;
  14. }
  15. for(int i=last;i<=n;i++){
  16. temp[cur]=i;
  17. dfs(cur+1,cnt+i,i);
  18. }
  19. }
  20. int main(){
  21. freopen("dataa.in","r",stdin);
  22. freopen("dataa.out","w",stdout);
  23. scanf("%d%d",&n,&m);
  24. num=0;
  25. dfs(1,0,1);
  26. printf("%d\n",num);
  27. for(int i=1;i<=num;i++){
  28. for(int j=1;j<m;j++)
  29. printf("%d ",ans[i][j]);
  30. printf("%d\n",ans[i][m]);
  31. }
  32. return 0;
  33. }


声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/Guff_9hys/article/detail/744356
推荐阅读
相关标签
  

闽ICP备14008679号