首页 > 试题广场 >

灵异背包?

[编程题]灵异背包?
  • 热度指数:3516 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 256M,其他语言512M
  • 算法知识视频讲解
\hspace{15pt}给定 n 个正整数 \{a_1,a_2,\dots,a_n\},你可以任选若干个放入“灵异背包”。

\hspace{15pt}要求背包内所有数之和为偶数,且在满足偶数的前提下尽可能大。若一个数也不选,则背包和为 0

\hspace{15pt}请输出可以获得的最大偶数和。

输入描述:
\hspace{15pt}第一行输入一个整数 n\left(1\leqq n\leqq 10^5\right)
\hspace{15pt}第二行输入 n 个整数 a_1,a_2,\dots,a_n\left(1\leqq a_i\leqq 2\times10^4\right)


输出描述:
\hspace{15pt}输出一个整数,表示满足条件的最大偶数和。
示例1

输入

3
2 5 6

输出

8

说明

当灵异背包里面有(2,5,6),此时总和为2+5+6=13,为奇数,不满足条件。
当灵异背包里面有(2,6),此时总和为2+6=8,为偶数,且为最大值。
示例2

输入

1
3

输出

0

说明

选择的灵异背包为空,总和为0。
n = int(input())
a = [int(x) for x in input().split()]
a.sort()
result = 0
if sum(a) % 2 == 0:
    print(sum(a))
else:
     for i in a:
         if i % 2 != 0:
             print(sum(a)-i)
             break
发表于 2025-10-04 10:48:25 回复(0)
import sys
inputs=[]
for line in sys.stdin:
    a = line.split()
    inputs.append(list(map(int,a)))
n=inputs[0][0]
an=inputs[1]
counts=0
j=[]
for i in range(n):
    if an[i] %2==0:
        counts+=an[i]
    else:
        j.append(an[i])

j=sorted(j,reverse=True)
se_n=len(j)//2*2
print(counts+sum(j[:se_n]))
发表于 2025-09-14 20:53:49 回复(0)
n = int(input())
a = list(map(int,input().split()))

min_ji = 2*1e4+1
summ = 0
for item in a:
    summ += item
    if item%2!=0 and item<min_ji:
        min_ji = item

if summ%2==0:
    print(summ)
else:
    print(summ-min_ji)
发表于 2025-09-07 00:25:11 回复(0)