360补笔试824上午场


AC1.8     做了个寂寞
1.遇见n换行 首字母大写  ac,模拟处理

2.n个英雄 m个装备,给出n*m数组表示第i个英雄装备j件装备的武力值,求最大武力值


示例
2 3
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))
            



#360公司##笔试题目#
全部评论

相关推荐

点赞 评论 收藏
转发
点赞 收藏 评论
分享
牛客网
牛客企业服务