把m个同样的苹果放在n个同样的盘子里,允许有的盘子空着不放,问共有多少种不同的分法?
注意:如果有7个苹果和3个盘子,(5,1,1)和(1,5,1)被视为是同一种分法。
数据范围:,。
# 苹果和盘都是无序的 # 不递增数列的数量 def getNonIncreaseListNum(head_cap,sum,size): if(sum < 0): return 0 if(head_cap*size<sum): return 0 if(sum == 0): return 1 if(size == 1): return 1 list_num = 0 for head_fig in range(head_cap,-1,-1): list_num += getNonIncreaseListNum(head_fig,sum-head_fig,size-1) return list_num input_str = input() m,n = list(map(int,input_str.split())) way_num = getNonIncreaseListNum(m,m,n) print(way_num)
n, m = map(int, input().split(' ')) res = [] temp = [] def iter_counts(n1, m): if m == 0: sum = 0 for each in temp: sum += each if sum != n: temp.pop(len(temp)-1) return if sorted(temp) not in res: res.append(sorted(temp)) temp.pop(len(temp) - 1) return for i in range(n1+1): temp.append(i) if m > 0: iter_counts(n1-i, m-1) temp.pop(len(temp) - 1) try: iter_counts(n, m) except Exception: pass print(len(res))
inputs=input().strip().split(' ') mm=int(inputs[0]) nn=int(inputs[1]) # f[m][n]=f[m][n-1]+f[m-n][n] if m>=n # f[m][n]=f[m][m] if m<n f = [[1 for i in range(nn+1)] for j in range(mm+1)] for m in range(2,mm+1): for n in range(2,nn+1): if m>=n: f[m][n]=f[m][n-1]+f[m-n][n] else: f[m][n]=f[m][m] print(f[-1][-1])
#想了挺久才想明白 apple,pz = map(int,input().split()) def solution(a,p): if a == 0&nbs***bsp;p == 0&nbs***bsp;a == 1&nbs***bsp;p == 1: return 1 elif a < p: return solution(a,a) return solution(a,p-1) + solution(a-p,p) print(solution(apple,pz))
m,n=map(int,input().split(' ')) def f(m,n): if m<2&nbs***bsp;n==1: return(1) elif m<n: return(f(m,m)) else: return(f(m,n-1)+f(m-n,n)) print(f(m,n))
m, n = map(int, input().split()) def app(a, b): if a < b: return app(a, a) if a <= 1: return 1 return sum([app(a - i, i) for i in range(1, b + 1)]) print(app(m, n))
def f(m,n): if (m<0&nbs***bsp;n<0)&nbs***bsp;(m==1 and n==0): return 0 elif n==1&nbs***bsp;(m==1 and n>0): return 1 else: return f(m,n-1)+f(m-n,n) line = input().split(' ') m , n = int(line[0]), int(line[1]) print(f(m,n))
将m个苹果放入n个盘子里,包含了2个事件:至少有一个盘子空着的事件A,和所有盘子都不空的事件B(每个盘子都至少有一个苹果)。A∪B即所有情况。A就是求f(m, n-1),B就是f(m-n, n)。事件B表示每个盘子都有一个苹果时再放m-n个苹果,等价于每个盘子都没有苹果时放m-n个苹果,所以可以直接写成 f(m-n, n)。注意m-n可能为负数,此时要返回0。
例如,f(4,4)=f(4,3)+f(0,4),f(0,4)等于1,表示在4个盘子中各放1个苹果
while True: try: m, n = map(int, input().split()) except: break else: a = [[0 for i in range(n+1)] for j in range(m+1)] for i in range(m+1): for j in range(1,n+1): if i == 0 or i== 1 or j == 1: a[i][j] = 1 elif i-j >= 0: a[i][j] = a[i][j-1] + a[i-j][j] else: a[i][j] = a[i][j-1] print(a[m][n])
import sys def f(a,p): if(a < p): return f(a,a) elif(p == 1&nbs***bsp;a <= 1): return 1 else: return f(a,p-1) + f(a-p,p) for line in sys.stdin: a,p = line.split(' ') a = int(a) p = int(p) print(f(a,p))