解题思路:
为了保证不能有重复的,则每位数都要比前一位数相等或者小于前面一位数
例如 对 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分
6 人评分
C二级辅导-进制转换 (C语言代码)浏览:827 |
2005年春浙江省计算机等级考试二级C 编程题(2) (C语言代码)浏览:495 |
C语言程序设计教程(第三版)课后习题11.1 (C语言代码)浏览:624 |
C语言程序设计教程(第三版)课后习题6.3 (C语言代码)浏览:940 |
三角形 (C++代码)记忆化搜索浏览:1226 |
简单的a+b (C语言代码)浏览:816 |
大家好,我是验题君浏览:577 |
C二级辅导-进制转换 (C语言代码)浏览:660 |
链表数据求和操作 (C语言代码)浏览:942 |
数列排序 (C语言代码)浏览:608 |