比赛 NOIP2015普及组练习 评测结果 C
题目名称 分组 最终得分 0
用户昵称 sxysxy 运行时间 0.000 s
代码语言 C++ 内存使用 0.00 MiB
提交时间 2015-11-06 20:02:28
显示代码纯文本
  1. #include <cstdio>
  2. #include <cstdlib>
  3. #include <iostream>
  4. //咦,泥萌确定这个不是数的划分那个题么?
  5.  
  6. int note[21][11][21];
  7. int dfs(int n, int m, int f)
  8. {
  9. int i,q = 0;
  10. if(note[n][m][f])return note[n][m][f];
  11. if(m == 1)return note[n][m][f] = 1;
  12. for(i = f; i <= n/m; i++)
  13. {
  14. q += dfs(n-i, m-1, i);
  15. }
  16. return note[n][m][f] = q;
  17. }
  18.  
  19. int a[21];
  20. int M;
  21. bool vis[21];
  22.  
  23. void p_m(int cur, int sy)
  24. {
  25. int i;
  26. if(cur == M && sy == 0)
  27. {
  28. for(i = 1; i < M; i++)
  29. {
  30. putchar(a[i]+'0');
  31. putchar(' ');
  32. }
  33. putchar('\n');
  34. return;
  35. }else
  36. {
  37. for(i = 1; i <= sy; i++)
  38. {
  39. if(i >= a[cur-1])
  40. {
  41. a[cur] = i;
  42. p_m(cur+1, sy-i);
  43. a[cur] = 0;
  44. }
  45. }
  46. }
  47. }
  48.  
  49. int main()
  50. {
  51. freopen("dataa.in", "r", stdin);
  52. freopen("dataa.out", "w", stdout);
  53. int n,m;
  54. scanf("%d %d", &n, &m);
  55. M = m+1;
  56. printf("%d\n",dfs(n,m,1));
  57. memset(vis, false, sizeof(vis));
  58. p_m(1,n);
  59. return 0;
  60. }