360补笔试824上午场
AC1.8 做了个寂寞
1.遇见n换行 首字母大写 ac,模拟处理
2.n个英雄 m个装备,给出n*m数组表示第i个英雄装备j件装备的武力值,求最大武力值
示例
2 3
5 6 7
7 8 9
13
5 6 7
7 8 9
13
有个小坑,给出的矩阵不是递增的 要处理一下
应该是状态压缩,但是python利用tuple记录状态还是会超时呢😫😫
m,n = list(map(int,input().strip().split())) a = [] import functools for i in range(m): a.append(list(map(int,input().strip().split()))) #处理数据变成拿到j件装备提升的武力值 aa = [] for i in range(len(a)): ttt = [a[i][0]] for j in range(1,len(a[0])): ttt.append(a[i][j]-a[i][j-1]) aa.append(ttt) a = aa #print(a) @functools.lru_cache(None) def helper(t):#状态t就是目前m个武士每个人拥有几件装备,没有装备就是0 #print(t) if sum(t) == n: return 0 res = 0 for i in range(m): tmp = [0]*m for j in range(len(t)): if i == j: tmp[j] = t[j]+1 else: tmp[j] = t[j] tt = helper(tuple(tmp)) #print(tt,tt+a[i][tmp[i]-1]) res = max(res,tt+a[i][tmp[i]-1]) return res num = tuple([0]*m) print( helper(num))