当前位置: 首页 > news >正文

信奥赛CSP-J复赛集训(模拟算法专题)(9):P6437 [COCI 2011/2012 #6] JACK

信奥赛CSP-J复赛集训(模拟算法专题)(9):P6437 [COCI 2011/2012 #6] JACK

在这里插入图片描述

题目描述

给定 n n n 个正整数 a 1 … a n a_1 \dots a_n a1an,请从中选择 3 3 3 个数字,满足他们的和不大于给定的整数 m m m,请求出这个和最大可能是多少。

输入格式

第一行有两个整数,分别表示数字个数 n n n 和给定的整数 m m m

第二行有 n n n 个整数,表示给定的 n n n 个数字 a i a_i ai

输出格式

输出一行一个整数表示答案。

输入输出样例 #1

输入 #1

5 21
5 6 7 8 9

输出 #1

21

输入输出样例 #2

输入 #2

10 500
93 181 245 214 315 36 185 138 216 295

输出 #2

497

说明/提示

数据规模与约定
  • 对于 100 % 100\% 100% 的数据,保证 1 ≤ n ≤ 100 1 \leq n \leq 100 1n100 6 ≤ m ≤ 3 × 1 0 5 6 \leq m \leq 3 \times 10^5 6m3×105 1 ≤ a i ≤ 1 0 5 1 \leq a_i \leq 10^5 1ai105,数据保证有解。

AC代码:

#include<bits/stdc++.h>
using namespace std;

int n, m, a[110], sum, ans = -1; // ans初始化为-1,表示无解的情况

int main() {
    cin >> n >> m;
    for(int i = 1; i <= n; i++) 
        cin >> a[i]; // 输入n个数字到数组a中

    // 三重循环枚举所有可能的三元组(i, j, k)
    for(int i = 1; i <= n; i++) {          // 枚举第一个数的索引i
        for(int j = 1; j <= n; j++) {      // 枚举第二个数的索引j
            for(int k = 1; k <= n; k++) { // 枚举第三个数的索引k
                // 确保三个索引互不相同(不同位置的元素)
                if(j != i && k != i && k != j) {
                    sum = a[i] + a[j] + a[k]; // 计算三数之和
                    // 若和不超过m,则更新最大值
                    if(sum <= m) 
                        ans = max(ans, sum);
                }
            }
        }
    }
    cout << ans; // 输出结果(若未更新则保持-1)
    return 0;
}

功能分析

  1. 问题目标
    从数组中选取三个不同位置的元素,使其总和不超过给定值m,同时尽可能接近m。若不存在合法组合,输出-1

  2. 核心逻辑

    • 三重循环暴力枚举:通过遍历所有可能的索引组合(i, j, k),确保三个索引互不相同(j != ik != ik != j),以此选取三个不同位置的元素。
    • 合法性检查:计算三数之和sum,若其不超过m,则用max函数维护最大值ans
  3. 时间复杂度
    三重循环的时间复杂度为O(n³),适用于n较小的情况(如题目隐含的n ≤ 100)。

文末彩蛋:

点击查看老师的个人主页,学习csp信奥赛完整系列课程:
https://edu.csdn.net/lecturer/7901

在这里插入图片描述

相关文章:

  • 数据库系统概论(二)数据模型
  • 记录--有惊无险
  • 产城融合典范:树莓科技如何助力宜宾数字经济腾飞​
  • 自启动、关联启动的拦截规则
  • 4g串口发短信踩坑
  • 【文件系统】
  • C语言for循环语句的用法(非常详细)
  • Ubuntu 源码安装 Qt5
  • 报错E0513:不能将 “const wchar_t *“ 类型的值分配到 “LPWSTR“ (aka “wchar_t *“) 类型的实体
  • 【性能测试入门_01性能测试jmeter基础实操场景详解】
  • # 如何确认elementary os (linux)使用的是Wayland而不是x11?
  • TCP连接过程图解
  • Android Compose是如何使用什么架构,多个Activity?还是Fragment?compose的ui又是如何卸载和挂载的呢?
  • 【day10】智慧导览:学习LBS定位精度标准
  • markdown转docx
  • Java基础关键_020_集合(四)
  • 电网电压暂态扰动机理与工业设备抗失压防护策略研究
  • 【SpringBoot】深入剖析 Spring Boot 自动装配原理(附源码与实战)
  • 内存检测工具——Qt Creator
  • git使用命令总结
  • 京东一季度净利增长五成,营收增速创近三年新高,称外卖业务取得显著进展
  • 上海北外滩,未来五年将如何“长个子”“壮筋骨”?
  • 四部门:到2025年底,全国行政村5G通达率超过90%
  • 这个“超强致癌细菌”,宝宝感染率高达40%,预防却很简单
  • 中国创面修复学科发起者之一陆树良教授病逝,享年64岁
  • 沈阳一超市疑借领养名义烹食流浪狗,当地市监局:已收到多起投诉