原题链接:信息学奥赛一本通T1440-数的划分
解题思路:
为了保证不能有重复的,则每位数都要比前一位数相等或者小于前面一位数
例如 对 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分
4 人评分
C语言网提供由在职研发工程师或ACM蓝桥杯竞赛优秀选手录制的视频教程,并配有习题和答疑,点击了解:
一点编程也不会写的:零基础C语言学练课程
解决困扰你多年的C语言疑难杂症特性的C语言进阶课程
从零到写出一个爬虫的Python编程课程
只会语法写不出代码?手把手带你写100个编程真题的编程百练课程
信息学奥赛或C++选手的 必学C++课程
蓝桥杯ACM、信息学奥赛的必学课程:算法竞赛课入门课程
手把手讲解近五年真题的蓝桥杯辅导课程
发表评论 取消回复