1、问题描述
一只业余足球队在安排11名球员的位置,球队踢4-3-3的战术(即1门将,4后卫,3中场,3前锋)。
每名球员有自己愿意踢的位置,比如MS只愿意踢后卫,而CR愿意踢中场和前锋。
作为球队教练的Lazy想知道,有多少种方案可以满足所有11名球员的愿望。
由于球队非常业余,所以不考虑后卫、中场、前锋各自内部的排列,即后卫{A,B,C,D}和后卫{D,C,B,A}是一样的。
输入格式
11行,每行长度为4的零一串,依次表示球员是否愿意做门将、后卫、中场、前锋。0表示不愿意,1表示愿意。
输出格式
1行一个整数表示方案数。
样例输入
1000
0100
0100
0100
0100
0010
0010
0010
0001
0001
0001
样例输出
1
2、问题分析
因为只有11个球员,球员数目较少,所以可以直接暴力枚举。确定枚举的最终条件应该满足两个条件1.11个人 2.11个球员各个位置的人数分别满足1 4 3 3时,方案数+1.
3.代码分析
利用python暴搜
def dfs(step):
if step==12:
if ans[0]==1 and ans[1]==4 and ans[2]==3 and ans[3]==3:
global count
count=count+1
return
for i in range(4):
if a[step][i]=='1':
ans[i]+=1
dfs(step+1)
ans[i]-=1
global a
a=[1]
for o in range(11):
a.append(input())
global ans
ans=[0]*4
count=0
dfs(1)
print(count)
利用Java暴搜
建立全局变量方案数目,利用递归循环不断向下搜索,当满足球员人数和各个球员位置的分配时,方案数目自加。