卡片
注意
除了最后一个方法,其他都只能解决70%的实例
动态规划
dp[i]
表示当有i个同学时,最少需要多少张卡片
通过思考观察发现:
- 当i=1时,组合加上(1,1)
- 当i=2时,组合加上(2,2)
- 当i=3时,组合加上(2,1)
- 当i=4时,组合加上(3,3)
- 当i=5时,组合加上(3,1)
- 当i=6时,组合加上(3,2)
排列序数
手动实现全排列
这个会超时,只通过了 75%
s = input()
ls = [c for c in s]
ls.sort()
num = 0
used = [False] * len(ls)
def dfs(current_s, depth):
"""
:param current_s: 当前字符串
:param depth: 当前深度
"""
global num
if depth == len(ls):
if current_s == s:
print(num)
num += 1
return
for i in range(len(ls)):
if used[i]:
continue
used[i] = True
dfs(current_s + ls[i], depth+1)
used[i] = False
dfs('', 0)