小红有 个英雄,第 个英雄的 cost 是 ,战斗力为 。另外,存在一些“双生英雄”关系,如果同时上阵某一对英雄,则可以获得额外的战斗力收益。 现在小红最多可以上阵四名英雄,且要求总 cost 不超过。小红希望你求出组队的最大战斗力。
区块链毕设网qklbishe.com为您提供问题的解答
小红有
个英雄,第
个英雄的 cost 是
,战斗力为
。另外,存在一些“双生英雄”关系,如果同时上阵某一对英雄,则可以获得额外的战斗力收益。
现在小红最多可以上阵四名英雄,且要求总 cost 不超过
。小红希望你求出组队的最大战斗力。
Python一直过不了,最多过3个用例,实在想不到优化方法了,有没有大佬帮忙再优化一下
n, C, m = list(map(int, input().split())) heromax = 4 baseinfo = [] for _ in range(n): baseinfo.append(list(map(int, input().split()))) pairsinfo = [] for _ in range(m): pairsinfo.append(list(map(int, input().split()))) pairsdict = dict() for i in range(m): if pairsinfo[i][0] > pairsinfo[i][1]: pairsinfo[i][0], pairsinfo[i][1] = pairsinfo[i][1], pairsinfo[i][0] pairsdict[pairsinfo[i][0] - 1] = [pairsinfo[i][1] - 1, pairsinfo[i][2]] def dpfind(info: list[list[int]]): dplist = [[0 for _ in range(C + 1)] for _ in range(heromax + 1)] for heroidx in range(n): for cmax in range(C, -1, -1): for heronum in range(heromax): herocost = info[heroidx][0] if herocost <= cmax: # 如果这个英雄cost够低 newPower = info[heroidx][1] + dplist[heronum][cmax - herocost] # print(dplist) dplist[heronum + 1][cmax] = max(dplist[heronum + 1][cmax], newPower) if heroidx in pairsdict.keys() and heronum < heromax - 1: pairidx = pairsdict[heroidx][0] paircost = info[pairidx][0] if paircost + herocost <= cmax: newPower = ( info[heroidx][1] + info[pairidx][1] + pairsdict[heroidx][1] + dplist[heronum][cmax - herocost - paircost] ) dplist[heronum + 2][cmax] = max( dplist[heronum + 1][cmax], newPower ) return dplist[-1][-1] print(dpfind(baseinfo))
58:38
以上就是关于问题小红有 个英雄,第 个英雄的 cost 是 ,战斗力为 。另外,存在一些“双生英雄”关系,如果同时上阵某一对英雄,则可以获得额外的战斗力收益。
现在小红最多可以上阵四名英雄,且要求总 cost 不超过。小红希望你求出组队的最大战斗力。的答案
欢迎关注区块链毕设网-
web3一级市场套利打新赚钱空投教程
区块链NFT链游项目方科学家脚本开发培训