python 一个组合问题:
有一个函数 f(X)=X2f(X)=X2。你还将获得KK个列表,每个列表包含NN个元素。 你需要从每个列表中选择一个元素,使下面的等式结果最大:
S=(f(X1X1)+f(X2X2)+...+f(XkXk))%M
XiXi表示第ii个列表的某个元素。求出获得的最大值SS。%
表示模运算符。
输入格式
第一行包含两个空格分隔的整数KK和MM。 接下来的KK行,每行包含一个整数NN,表示列表中的元素数量,后面跟着NN个空格分隔的整数,表示列表中的元素。
限制条件
- 1≤K≤71≤K≤7
- 1≤M≤10001≤M≤1000
- 1<=元素大小<=1091<=元素大小<=109
输出格式
输出一个整数,即最大值SS。
#在此处编写你的代码。 mm = 0 def get_combinations(lists, m,index=0, current_combination=[]): # 如果当前索引已经超出所有子列表的范围,添加当前组合到结果列表 global mm if index == len(lists): mm=max(mm, sum([a*a for a in current_combination])%m) return # 遍历当前子列表中的每个元素 for element in lists[index]: # 递归选择下一个子列表的元素 get_combinations(lists,m, index + 1, current_combination + [element]) n,m=list(map(int,input().split())) lst=[] for i in range(n): tmp=(list(map(int,input().split())))[1:] lst.append(tmp) get_combinations(lst,m) print(mm)
解释: 从第一个列表中选取5,从第二个列表中选择9,从第三个列表中挑选10,得到的最大S值等于(5252+9292+102102)%1000=206。
- 需要从每个列表中只取一个元素,但不一定是最大的元素。
- 将所选元素的平方相加,然后执行模运算
%M
,从而获得可能的最大值。