python - 找到最大加权子集,使得子集中的任何两个元素总和不等于 k
问题描述
子集的权重是每个键的值的长度。
这是我的尝试:
def nonDivisibleSubset(k, s):
remdict={}
result=[]
for i in range(len(s)):
rem=s[i]%k
if rem not in remdict:
remdict[rem]=[s[i]]
else:
remdict[rem].append(s[i])
b=dict(sorted(remdict.items(), key= lambda x: len(x[1]), reverse=True))
Input:
k=7
{2: [576, 338, 149, 702, 282, 436], 6: [496, 727, 209], 5: [278, 124], 4: [410, 718], 1: [771, 575]}
在这本字典中,我只想附加键 2,6,4 的值,因为 2+6!=7 和 2+4!=7 和 6+4!=7**
解决方案
所以首先 - 我们需要找到所有不同的组合,然后从中找到最大值。
这是查找所有不同组合的代码:
def check(d, s, k):
for i in d:
if i + s == k:
return False
return True
for i in s:
temp = [i]
d = s.copy()
d.pop(i)
for j in d:
if check(temp, j, k):
temp.append(j)
temp.sort()
res_lst.append(temp)
unique_data = [list(x) for x in set(tuple(x) for x in res_lst)]
(参考如何查找unique_data
:Python:列表列表的唯一性)
找到最大子集:
res = []
res_sum = 0
for l in unique_data:
tmp_sum = 0
for n in l:
tmp_sum += len(s[n])
if tmp_sum > res_sum:
res = l
res_sum = tmp_sum
return res
推荐阅读
- java - 杰克逊:@JsonUnwrapped 自定义字段名称和自定义反序列化模块时无法识别的字段
- amazon-web-services - 是否可以在 AWS 中自动创建 AMI?
- pip - 如何在openSUSE Tumbleweed上安装柯南包管理器最正确?
- python - 将ftr文件读入R
- android - 仅限三星的 IllegalStateException
- octobercms - 在 OctoberCMS 中急切加载关系数据
- javascript - 当我从下拉菜单中选择选项时多次调用函数
- npm - 有没有办法自动检查 npm 模块依赖关系并在其中一个更新时重建?
- python - 列出不属于 Cloud Storage 中文件夹的 Blob
- iframe - 在 Cypress 中使用 iframe - 打破跑步者的时间旅行?