每日一题 -- 11-1

动态规划——合唱团 题目: 有 n 个学生站成一排,每个学生有一个能力值,从这 n 个学生中按照顺序选取 k 名学生,要求相邻两个学生的位置编号的差不超过 d,使得这 k 个学生的能力值的乘积最大,返回最大的乘积。 每个输入包含 1 个测试用例。每个测试数据的第一行包含一个整数 n (1 <= n <= 50),表示学生的个数,接下来的一行,包含 n 个整数,按顺序表示每个学生的能力值 ai(-50 ... 阅读详情

一天十题选择,一天一道编程,一天一个面试题,一个一个剑指offer

排序是必须要掌握的一个算法,非常的重要

题目描述

有 n 个学生站成一排,每个学生有一个能力值,牛牛想从这 n 个学生中按照顺序选取 k 名学生,要求相邻两个学生的位置编号的差不超过 d,使得这 k 个学生的能力值的乘积最大,你能返回最大的乘积吗?

输入描述:

每个输入包含 1 个测试用例。每个测试数据的第一行包含一个整数 n (1 <= n <= 50),表示学生的个数,接下来的一行,包含 n 个整数,按顺序表示每个学生的能力值 ai(-50 <= ai <= 50)。接下来的一行包含两个整数,k 和 d (1 <= k <= 10, 1 <= d <= 50)。

输出描述:

输出一行表示最大的乘积。

示例1

输入

3
7 4 7
2 50

输出

49

题目分析

本题是网易的一道动态规划的题目,题目中让我们求解的是一个最优解的问题,我们这里可以考虑使用的算法是动态规划来进行求解,这里我们需要求解从n个人当中选择k使得这k的乘积最大,这个问题我们就需要设置的 二维数组,数组的中表示的是第i个数作第j个乘数的时候的最大值,这里我们需要维护一个最大值的数组,还需要维护一个最小值的数组,原因是,我们的最大值可能是由我们的最小值的一个负数乘以一个负数得到的,同时我们的最小值也可能是最大值中的一个最大数乘以我们的一个负数得到的,所以这里需要维护两个数组,同时还应该注意的一个问题就是,我们的数据中,还需要控制的一个间距。

代码
#define _CRT_SECURE_NO_WARNINGS 1
#include<iostream>
#include<vector>
#include<algorithm>
using namespace std;

int main()
{
    int n;
    while (cin >> n)
    {
        vector<long long> arr(n);
        for (int i = 0; i<n; i++)
        {
            cin >> arr[i];
        }

        int k, d;
        cin >> k >> d;

        vector<vector<long long>> dp_max(n, vector<long long>(k + 1, 0));
        vector<vector<long long>> dp_min(n, vector<long long>(k + 1, 0));

        //初始化最大和最小数组
        for (int i = 0; i<n; i++)
        {
            dp_max[i][1] = arr[i];
            dp_min[i][1] = arr[i];
        }

        for (int i = 0; i<n; i++)
        {
            for (int j = 2; j<k + 1; j++)
            {
                for (int m = max(0, i - d); m<=i - 1; m++) //这里的m控制的是间隔,就是说,我们的间隔要控制好了
                {
                    dp_max[i][j] = max(dp_max[i][j], max(dp_max[m][j - 1] * arr[i], dp_min[m][j - 1] * arr[i]));
                    dp_min[i][j] = min(dp_min[i][j], min(dp_min[m][j - 1] * arr[i], dp_max[m][j - 1] * arr[i]));
                }
            }
        }

        long long maxnum = dp_max[k-1][k];
        for (int i = k; i<n; i++)
        {
            maxnum = max(maxnum, dp_max[i][k]);
        }

        cout << maxnum << endl;
    }


    return 0;
}
网易 合唱团 n个学生站成一排,每个学生有一个能力值 牛牛想从n个学生中选出k名学生 要求相邻学生编号不超过d使得这k个学生乘积最大 题目描述有 n 个学生站成一排,每个学生有一个能力值,牛牛想从这 n 个学生中按照顺序选取 k 名学生,要求相邻两个学生的位置编号的差不超过 d,使得这 k 个学生的能力值的乘积最大,你能返回最大的乘积吗?输入描述:每个输入包含 1 个测试用例。每个测试数据的第一行包含一个整数 n (1 &lt;= n &lt;= 50),表示学生的个数,接下来的一行,包含 n 个整数,按顺序表示每个学生的能力值... 阅读详情

相关推荐

【Python】青少年蓝桥杯_每日一题_1.11_奇偶数

本题比较简单,直接上代码: N = int(input()) if N % 2 == 0: print(0) else: print(1)

梁同学与Android 354

合唱团(2016网易编程题)

题目: 有 n 个学生站成一排,每个学生有一个能力值,牛牛想从这 n 个学生中按照顺序选取 k 名学生,要求相邻两个学生的位置编号的差不超过 d,使得这 k 个学生的能力值的乘积最大,你能返回最大的乘积吗? 输入描述: 每个输入包含 1 个测试用例。每个测试数据的第一行包含一个整数 n (1 i(-50 输出描述: 输出一行表示最大的乘积。 输入例子:

hui1140621618的博客 4751

ESP32 TWAI CAN库实战:从零构建CyberGear微电机控制框架

本文详细介绍了如何利用ESP32的TWAI控制器和Arduino环境,从零构建一个面向对象的CyberGear微电机控制框架。该框架将复杂的CAN通信协议封装为简洁的API,开发者无需深究底层细节,即可轻松实现电机的速度、位置和扭矩控制,大幅简化机器人关节、云台等项目的开发流程。

oil88的博客 499

合唱团-网易python

题目描述 有 n 个学生站成一排,每个学生有一个能力值,牛牛想从这 n 个学生中按照顺序选取 k 名学生,要求相邻两个学生的位置编号的差不超过 d,使得这 k 个学生的能力值的乘积最大,你能返回最大的乘积吗?输入描述: 每个输入包含 1 个测试用例。每个测试数据的第一行包含一个整数 n (1 <= n <= 50),表示学生的个数,接下来的一行,包含 n 个整数,按顺序表示每个学生的能力值 ai

SoundSlow的博客 1606

wps js宏获取工作簿、工作表、单元格的值、链接转图片、单元格区域数据转二维数组、保存工作簿的常用Excel操作

wps js宏入门看这里,我写了常用的js操作Excel的方法:获取工作簿对象、获取工作表对象、获取单元格的值、链接转图片、生成条形码图片、单元格区域数据转二维数组方法、保存工作簿、弹出输入框、YesNo选择框,助你从VBA转战JS。

huaermeier的博客 3万+

张量积曲面:数学原理与Python实现

Suv∑i0m∑j0nPij⋅Bipu⋅BjqvSuvi0∑m​j0∑n​Pij​⋅Bip​u⋅Bjq​v其中PijP_{i,j}Pij​是控制点网格,BipuB_i^p(u)Bip​u和BjqvB_j^q(v)Bjq​v是基函数,分别沿uuu和vvv方向定义。

T20151470的博客 1154

网易2017内推笔试题

有 n 个学生站成一排,每个学生有一个能力值,牛牛想从这 n 个学生中按照顺序选取 k 名学生,要求相邻两个学生的位置编号的差不超过 d,使得这 k 个学生的能力值的乘积最大,你能返回最大的乘积吗?  输入描述: 每个输入包含 1 个测试用例。每个测试数据的第一行包含一个整数 n (1 i(-50 输出描述: 输出一行表示最大的乘积。 输入例子: 3 7 4

a1223031949的专栏 1612

Claude Code Router 401错误修复

claude code router配置相关环境变量问题

如沐春风 6357

1.11每日一题

题目链接:https://leetcode.cn/problems/first-bad-version/description/

一位小菜鸡的博客 132

大开眼界的十大开源人工智能项目

这是一个强大的开源工具,能让你在不同框架之间自由切换,无需重写代码。它是一个开源工具,能用简单的SQL语言同时处理数据和AI模型,让一切变得有序而高效。Rasa是我开发智能聊天机器人时的首选,它让你轻松掌控机器人对话的每个细节。我经常用它快速验证模型在不同框架下的表现,省去了大量烦躁的调试过程。最近发现的Vapi是一个以API方式提供的语音AI工具,开发者友好程度超乎想象。KNIME是一个以拖拽方式构建数据分析流程的开源工具,仿佛是数据界的乐高积木。它像个忠诚的守门员,确保你的模型始终健康运行。

wjianwei666的专栏 1103

基于单片机的室内空气质量监控系统设计

摘 要 I Abstract II 引 言 1 1 控制系统设计 3 1.1 方案选择 3 1.2 系统控制原理 4 2系统硬件设计 5 2.1 单片机的选择与设计 5 2.2 温湿度模块设计 6 2.3 甲醛采集模块设计 8 2.4 显示器模块设计 9 2.5 按键模块设计 10 2.6 报警模块设计 11 2.7 加湿及风扇模块设计 11 3系统软件设计 13 3.1 总流程方案设计 13 3.2 温湿度获取的软件设计 14 3.3 液晶屏LCD1602的软件设计 15 4系统调试 13 4

Q_1928499906的博客 2698

每日一题3.11.1

每日一题3.11.1 题目描述:求一个数,变成fibnoacci数的最小步数 解题思路: 依次比较fibnoacci数列,找到比N小的最大fibnoacci数和比N大的最小fibnoacci数,分别计算与N的差值,取最小的输出 代码实现: #include &lt;iostream&gt; using namespace std; int min(int a, int b) { if (a &...

lxb18821659801的博客 207

VSCode PlantUML 插件超详细教程:从安装配置到实战绘图全流程

VSCode PlantUML 插件超详细教程:从安装配置到实战绘图全流程

weixin_69237381的博客 908

数学——每日一题4 1.11 洛必达

qq_38120081的博客 134

【VS Code插件开发】通用功能(二)

本篇主要从command(命令)、menus(菜单)、快捷键三个方面讲解,都归于通用功能。

编码世界 1万+

老版QQ原生表情gif动态

这是老版的QQ表情,不过全是动态的的,Windows照片查看器是不会动的,可以右击用浏览器打开查看,再说一遍是老版的,只是分享给宁愿用老版也要动态的人。

数学——每日一题11 1.18 反函数求导

2021考研数学每日一题1.18_哔哩哔哩 (゜-゜)つロ 干杯~-bilibili https://www.bilibili.com/video/av84005688

qq_38120081的博客 439

IDEA的使用指南

IDEA基于java的使用手册,可以最快速的上手,在使用中不断的丰富自己的使用技巧.

11.1每日一题

题目链接:https://www.nowcoder.com/practice/4d2a100c2e544f56ac1ad17e9ffa107d。

一位小菜鸡的博客 133

数学建模模型总结

这是本人在两年内准备参加数学建模竞赛搜集到的模型资料,已经经过了本人的筛选和整理,希望能够对准备参加数学建模竞赛的学弟学妹们提供一些帮助!

复分析 阿尔福斯(Ahlfors) 第三版答案 英文

答案分为十章,有部分习题没有答案,全英文复分析阿尔福斯(Ahlfors) 第三版答案

LeetCode每日一题11.1

LeetCode每日一题

weixin_45841172的博客 118

2024.1.11每日一题

链接:https://leetcode.cn/problems/minimum-additions-to-make-valid-string/solutions/2590673/gou-zao-you-xiao-zi-fu-chuan-de-zui-xiao-vfaf/,你可以向其中任何位置插入 “a”、“b” 或 “c” 任意次,返回使。如果字符串可以由 “abc” 串联多次得到,则认为该字符串。需要插入的最少字母数。

ysk_0904的博客 697

LeetCode 每日一题 2026/1/5-2026/1/11

记录了初步解题思路 以及本地实现代码;并不一定为最优 也希望大家能一起探讨 一起进步

AlphaTao的博客 803

力扣11.1每日一题

力扣刷题

weixin_53745271的博客 355

C语言1 11 21 1211,每日一题31

原标题:每日一题31每日一题 编程语言的学习,绝非一朝一夕,没有成千上万代码的累计是不可能的。——Dennis Ritchie(C语言之父)我们每个人都应该会编程,因为它教你如何思考。——apple创始人 史蒂夫.乔布斯题目描述(leetcode报数Count and Say)报数序列是一个整数序列,按照其中的整数的顺序进行报数,得到下一个数。第一项存入一个字符‘1’,那么你就从第二项开始描述前一...

weixin_39695701的博客 355

【LeetCode】每日一题 2024_11_1 超级饮料的最大强化能量(DP)

【LeetCode】每日一题 2024_11_1 超级饮料的最大强化能量(DP)

Locky136的博客 727

11.1 - 每日一题 - 408

每日一句:勤奋可以弥补聪明的不足,但聪明无法弥补懒惰的缺陷。 新的一月,新的开始,也要继续努力坚持下去呀。 数据结构 1.快速排序在最坏情况下的时间复杂度与下面 算法最坏情况下的时间复杂度相同。(中国科学院大学 2018) A. 堆排序 B. Shell排序 C. 冒泡排序 D. 基数排序 答案: C 解析: 快速排序最坏情况下时间复杂度是O(n2),堆排序最坏情况下时间复杂度O( nlog(2)n),冒泡排序最坏情况下时间复杂度O(n2) 拓展: 计算机网络 2.关于IP地址127.0.0.1的

yanlei233的博客 376

每日一题 2020.11.1

140. 单词拆分 II 给定一个非空字符串 s 和一个包含非空单词列表的字典 wordDict,在字符串中增加空格来构建一个句子,使得句子中所有的单词都在词典中。返回所有这些可能的句子。 说明: 分隔时可以重复使用字典中的单词。 你可以假设字典中没有重复的单词。 思路:记忆化搜索 var dp [][][]string var words map[string]bool func solve(index int,s string) [][]string{ if dp[index] != nil{

HXACA的博客 166

去掉左边0_每日一题0基础学前端高薪就业1.11

Hello同学们下午好~我是一灯大师兄近期充分的感受到了同学们对前端开发的兴趣和学习的热情,前端领域发展很快,各种新技术新思想持续涌现,只有不断地学习才能保证自己不掉队,跟上进度。除了要按时上课外,也要记得每天准时来练习【每日一题】哦~今日话题 --1.11日 -- 题目:CSS3...

weixin_39793434的博客 69
上一篇: 数据库2.0 -- 数据类型和数据表的基本操作
下一篇: Leanote
NeilZhy
博客等级 码龄11年 175粉丝 145原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值