Java教程

【蓝桥杯算法训练】- 球员安排

本文主要是介绍【蓝桥杯算法训练】- 球员安排,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!

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暴搜
枚举
建立全局变量方案数目,利用递归循环不断向下搜索,当满足球员人数和各个球员位置的分配时,方案数目自加。

这篇关于【蓝桥杯算法训练】- 球员安排的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!