当前位置:   article > 正文

搜索入门题目_搜索例题

搜索例题

分组 

输入文件: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. #include<iostream>
  2. #include<cstdio>
  3. #include<cstdlib>
  4. #include<queue>
  5. using namespace std;
  6. int a[10];
  7. int depth,ans;
  8. struct node{
  9. char p[11];
  10. };
  11. queue<node> q;
  12. //还可以用vector来存也可以,不用结构体来存
  13. void dfs(int n,int m,int k)
  14. {
  15. if(m==1)
  16. {
  17. ans++;
  18. node c;
  19. int i;for(i=depth-1;i>0&&a[i]!=0;i--)c.p[i]=a[i];
  20. c.p[i]=n;q.push(c);
  21. return;
  22. }
  23. a[m-1]=k;
  24. if(k*2>n) return;
  25. dfs(n-k,m-1,k);
  26. dfs(n,m,k+1);
  27. }
  28. int main()
  29. {
  30. freopen("dataa.in","r",stdin);
  31. freopen("dataa.out","w",stdout);
  32. int n;
  33. cin>>n>>depth;
  34. dfs(n,depth,1);
  35. cout<<ans<<endl;
  36. while(!q.empty()){
  37. node p=q.front();
  38. for( int i=depth-1;i>=0&&p.p[i]!=0;i--) {
  39. printf("%d ",p.p[i]);
  40. }
  41. printf("\n");
  42. q.pop();
  43. }
  44. return 0;
  45. }


 

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

闽ICP备14008679号