解题思路:

为了保证不能有重复的,则每位数都要比前一位数相等或者小于前面一位数
例如 对 7 分成 3 份 可以看成a,b,c  --->  a<=b<=c 这样就能保证不会有重复的

对a(也就是第一位数)来说 一共有 7//3 种可能性 也就是 1,2

对b(第二位数)来说 一共有 (7-a)//2-a种可能性 

        a=1    b有 (7-1)//2-a+1 = 3 种可能 --> 1,2,3,

        a=2    b有 (7-2)//2-a+1 = 1 种可能 --> 2

只要a和b确定下来 则c也就可以确定


参考代码:

def DFS(x, k, n):
   if k == 1:
       return 1
   s = 0
   for i in range(x, n // k + 1):  # 能取的数有多少
       s += DFS(i, k - 1, n - i)
   return s


n, k = map(int, input().split())
print(DFS(1, k, n))

点赞(0)
 

0.0分

4 人评分

C语言网提供由在职研发工程师或ACM蓝桥杯竞赛优秀选手录制的视频教程,并配有习题和答疑,点击了解:

一点编程也不会写的:零基础C语言学练课程

解决困扰你多年的C语言疑难杂症特性的C语言进阶课程

从零到写出一个爬虫的Python编程课程

只会语法写不出代码?手把手带你写100个编程真题的编程百练课程

信息学奥赛或C++选手的 必学C++课程

蓝桥杯ACM、信息学奥赛的必学课程:算法竞赛课入门课程

手把手讲解近五年真题的蓝桥杯辅导课程

评论列表 共有 0 条评论

暂无评论