测评会员优惠活动进行中 · 开通 VIP,有效期内测评不限次 VIP 优惠中 · 测评不限次 立即查看

A26918. 学习小组

填空题 困难

题目描述

学习小组

题目描述

班主任计划将班级里的n名同学划分为若干个学习小组,每名同学都需要分入某一个学习小组中。观察发现,如果一个学习小组中恰好包含k名同学,则该学习小组的讨论积极度为 ak。

给定讨论积极度 a1,a2…,an,请你计算将这n名同学划分为学习小组的所有可能方案中,讨论积极度之和的最大值。

输入格式

第一行,一个正整数 n,表示班级人数。

第二行,几个非负整数a1,a2…,an,表示不同人数学习小组的讨论积极度。

输出格式

输出共一行,一个整数,表示所有划分⽅案中,学习小组讨论积极度之和的最大值。

样例

输入样例 1

4
1 5 6 3

输出样例 1

10

输入样例 2

8
0 2 5 6 4 3 3 4

输出样例 2

12

数据范围

对于 40% 的测试点,保证 1≤n≤ 10。

对于所有测试点,保证1≤n≤1000,0≤ai≤104。

参考答案

# 首先记录同学总数 n = int(input()) # 记录一个小组有k个同学的情况下,讨论积极度 a = [0] + list(map(int, input().split())) # 0个同学的时候,讨论度为0 dp = [0] # 遍历同学总数k for k in range(1, n + 1): # i,j表示将k个同学分解为i个同学和j个同学两部分 dp.append(0) for i in range(0, k): j = k - i # 核心状态转移公式 dp[k] = max([a[k], dp[i] + dp[j], d[k]]) print(dp[n])
上一题 下一题