[GESP202506 六级] 学习小组(含视频)

视频讲解:GESP202506 六级 学习小组-信息学奥赛GESP等级考试真题解析

一、原题

题目描述

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

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

输入格式

第一行,一个正整数 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​≤10^4。

二、做题思路

1)填充数据

cpp 复制代码
#include<bits/stdc++.h>
using namespace std;
int main(){
	//1)填充数据
	//1.1)确定数量n 
	int n;cin>>n;
	//1.2)每种人数的积极度
	int a[1005]={};
	for(int i=1;i<=n;i++) cin>>a[i];
	return 0; 
}

2)动态规划:计算当前人数的最优解

cpp 复制代码
//1)填充数据
	//....
	//2.1)dp初始化
	long long dp[1005]={}; 
	//2.2)循环每种人数
	for(int i=1;i<=n;i++){
		//2.3)加入这种人数的最优解
		for(int j=i;j<=n;j++){
			//不拿:dp[j]
			//拿:a[i]+dp[j-i]
			dp[j]=max(dp[j],a[i]+dp[j-i]) ;
		}
	}
	cout<<dp[n];

三、答案

cpp 复制代码
#include<bits/stdc++.h>
using namespace std;
int main(){
	//1)填充数据
	//1.1)确定数量n 
	int n;cin>>n;
	//1.2)每种人数的积极度
	int a[1005]={};
	for(int i=1;i<=n;i++) cin>>a[i];
	//2)动态规划:计算当前人数的最优解
	//2.1)dp初始化
	long long dp[1005]={}; 
	//2.2)循环每种人数
	for(int i=1;i<=n;i++){
		//2.3)加入这种人数的最优解
		for(int j=i;j<=n;j++){
			//不拿:dp[j]
			//拿:a[i]+dp[j-i]
			dp[j]=max(dp[j],a[i]+dp[j-i]) ;
		}
	}
	cout<<dp[n];
	return 0; 
}
相关推荐
前进的李工12 小时前
Agent 学习笔记 05:系统提示词应该怎么写
笔记·学习·prompt·agent·个人开发·few-shot·ai应用开发
正在走向自律14 小时前
【3/5】人工智能训练师 三级/高级工 考证学习方向:从“独立执行”到“设计、归因与全链条负责”
人工智能·学习·人工智能训练师·注方案设计·数据质控负责人·模型评测与调优辅助·ai训练项目交付
CCIE-Yasuo15 小时前
网络安全-学习数据库-Mysql-2
数据库·学习·mysql
La Pulga16 小时前
【FreeRTOS源码学习笔记】任务切换
单片机·mcu·学习·嵌入式·freertos·实时操作系统
li星野17 小时前
【学习记录】逻辑分析仪完全入门:从品牌方案到采样率、存储深度的核心概念解析
学习
旖旎夜光17 小时前
【C++ 基础入门】类和对象(上):封装、对象模型与 this 指针
开发语言·c++·笔记·学习
WEI_YANG_JU18 小时前
初中数学教学中合作学习的研究与实践
学习
码农小韩18 小时前
FPGA学习(一)——LED点灯与开发流程
学习·fpga开发·入门·环境配置·仿真·点灯
李长渊哦19 小时前
Qoder 自定义子智能体(Subagent)学习笔记
chrome·笔记·学习
代码山河19 小时前
基本类型转换:自动类型转换与强制类型转换
java·学习·架构·教程·面向对象·项目