小红拿到了一个数组,她想取一些数使得取的数之和尽可能大,但要求这个和必须是 k 的倍数。你能帮帮她吗?

博客探讨了如何帮助小红从给定数组中找到和为k的倍数且和最大的子集问题。文章提供了简洁的Python代码实现。
摘要由CSDN通过智能技术生成
小红取数
时间限制: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=',
  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值