小红得到了一个阵法。 她想取一些数字使数字之和尽可能大,但要求和必须是k的倍数。 你能帮帮她吗?
小红取数 时间限制:1秒 空间限制:256M 描述 小红拿到了一个数组,她想取一些数使得取的数之和尽可能大,但要求这个和必须是 k 的倍数。 你能帮帮她吗? 输入描述: 第一行输入两个正整数 n 和 k 第二行输入 n 个正整数 ai 1≤n,k≤10**3 1 ≤ ai ≤ 1 0 **10 输出描述: 如果没有合法方案,输出 - 1。 否则输出最大的和。
我写的比较简单和直观的 代码如下:
while True: n,k=map(int,input().strip().split(' ')) if n >= 1 and n <= 10**3 and k >= 1 and k <= 10**10: break else: print('n或k输入超过范围1≤n,k≤10**3,1 ≤ ai ≤ 1 0 **10') # arr = [int(input()) for _ in range(n)] arr=[13,14,17,1,2]#list(map(int,input().split(' '))) # arr=list(map(int,input().strip().split(' '))) while True: arr=list(map(int,input().strip().split(' '))) if n == len(arr): break else: print('输入{}个数:'.format(n)) # print(n,k,arr) '''求数组的所有子集res''' res=[[]] for i in arr: # print('i=',i) for j in res[:]: # print('j,x==',j) x=j[:] x.append(i) # print('x==', x) res.append(x) # print('res===',res) print(res) '''求各子集元素和的最大值,并降序排列''' res1={} for i in range(len(res)): res1[i]=sum(res[i]) res1=dict(sorted(res1.items(), key=lambda x: x[1], reverse=True)) print(res1) '''取能够被K整除的最大值''' result=-1 for i in res1: if res1[i]%k==0 and res1[i]!=0: result=res1[i] print(i,res1[i],res[i]) break print(result)