跳转至

烤鸡

题目描述

猪猪Hanke特别喜欢吃烤鸡(本是同畜生,相煎何太急!)Hanke吃鸡很特别,为什么特别呢?因为他有10种配料(芥末、孜然等),每种配料可以放1到3克,任意烤鸡的美味程度为所有配料质量之和。

现在,Hanke想要知道,如果给你一个美味程度n,请输出这10种配料的所有搭配方案。

输入描述

一个正整数n,表示美味程度。

输出描述

第一行,总方案数。

第二行至结束,10个数,表示每种配料所放的质量,按字典序排列。

如果没有符合要求的方法,就只要在第一行输出一个0。

样例输入

11

样例输出

10

1 1 1 1 1 1 1 1 1 2

1 1 1 1 1 1 1 1 2 1

1 1 1 1 1 1 1 2 1 1

1 1 1 1 1 1 2 1 1 1

1 1 1 1 1 2 1 1 1 1

1 1 1 1 2 1 1 1 1 1

1 1 1 2 1 1 1 1 1 1

1 1 2 1 1 1 1 1 1 1

1 2 1 1 1 1 1 1 1 1

2 1 1 1 1 1 1 1 1 1

代码详解

展开查看
n = int(input())

arr = [0 for i in range(10+1)] #存临时方案
mem = [[0 for i in range(10+1)] for i in range(100+1)] #存所有方案
res = 0

def dfs(x, sum):
    global res
    if sum > n: return
    if x > 10:
        if (sum == n):
            res += 1
            for i in range(1, 10+1):
                mem[res][i] = arr[i]
        return

    for i in range(1, 3+1):
        arr[x] = i
        dfs(x+1, sum+i)
        arr[x] = 0 #恢复现场dfs(1, 0)
# 打印方案数
print(res)
# 打印具体方案
for i in range(1, res+1):
    for j in range(1, 10+1):
        print(mem[i][j], end=" ")
    print()

运行结果

展开查看
11
10
1 1 1 1 1 1 1 1 1 2 
1 1 1 1 1 1 1 1 2 1 
1 1 1 1 1 1 1 2 1 1 
1 1 1 1 1 1 2 1 1 1 
1 1 1 1 1 2 1 1 1 1 
1 1 1 1 2 1 1 1 1 1 
1 1 1 2 1 1 1 1 1 1 
1 1 2 1 1 1 1 1 1 1 
1 2 1 1 1 1 1 1 1 1 
2 1 1 1 1 1 1 1 1 1