一天十题选择,一天一道编程,一天一个面试题,一个一个剑指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;
}

每日一题 -- 11-1相关推荐

  1. 每日一题 11.3 账户合并

    每日一题11.3 账户合并 一.题目概述 虽然是中档题,但是这个题目对我来说太难了...我研究了挺长时间,本来不想写什么了,但是既然flag都立起来了,那我总要完成. 这个题应该是有两个做法,一套是并 ...

  2. 每日一题 11.4 鸡蛋掉落

    每日一题 11.4 鸡蛋掉落 一.题目概述 这是一道困难题,难度肯定是比前三天的要大的,这个毋庸置疑,但是毕竟趣味性在这里摆着,和昨天那个相比,钻研这个的兴趣要更大一点,昨天那个并查集和哈希表实在是太 ...

  3. 每日一题 11.9 整数转换英文表示

    每日一题 11.9 整数转换英文表示 一.题目概述 这个题是困难的题,第一眼看到这个题还是比较怕的,但是看了一下具体的内容,感觉还好,但是我有点弄不明白的是,英文里最大计数单位是多少,有没有比tril ...

  4. CISP/CISA 每日一题 11

    CISA 每日一题(答) 一个合理建造的数据仓库应当支持下列三种基本的查询格式: 1.向上溯源和向下溯源--向上溯源是对数据进行总计:向下溯源是将数据进行细化: 2.交叉溯源--通过通用属性访问数据仓 ...

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

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

  6. 每日三题 11.22

    1.组织正在经历从瀑布模式到敏捷开发的转变.该组织计划逐步采取"混合敏捷"开发过程.项目经理受聘来领导组织转变和产品开发.项目经理下一步该怎么做? A.建立工作授权和工作分解结构 ...

  7. 每日三题 11.03

    1. 批准项目章程之后,人力资源总监要求增加项目范围.一名项目团队成员在没有通知项目经理的情况下增加了这些范围.项目经理应该怎么做? A. 与团队成员讨论该问题 B. 执行实施整体变更控制过程 C. ...

  8. 每日三题 11.10

    1. 在项目开发阶段,职能经理被调到另一个部分,不再参与项目.项目经理首先应该做什么? A. 修订沟通管理计划  B. 更新相关方登记册 C. 评估对风险的影响  D. 审查项目人员分配 2. 项目经 ...

  9. 每日三题 11.04

    1. 项目执行六个月后,项目经理确定成本绩效指数(CPI)为 0.9,且趋势分析显示CPI 呈下降趋势,项目经理下一步应该怎么做? A. 提交重订成本基准的变更要求  B. 请求额外的资源 C. 对项 ...

  10. Python每日一题 - 11 - 打印出所有“水仙花数”

    前言: 本人因喜欢python和c语言等程序设计语言,希望能够在这里和大家共同学习共同进步. 因个人喜好喜欢做题,所以想出一个系列专栏关于python的习题专集,希望大家喜欢. 希望能在这里分享学习的 ...

最新文章

  1. 200行代码解读TDEngine背后的定时器
  2. php下session入memcached
  3. 正则表达式截取URL参数值
  4. python进程和线程
  5. 35岁成MIT终身教授!北大数学“黄金一代”再获大奖
  6. hdfs的特性、命令、安全模式、基准测试
  7. leetcode279 完全平方数
  8. linux安装中文输入法sc,Linux下安装Discuz_7.2_FULL_SC_GBK
  9. python实现注册登录检验系统的源代码_Django自带的用户验证系统实现
  10. 王思聪怒了!大众点评紧急道歉:相关账户已冻结
  11. IDA远程调试Android
  12. mysql排序优化_Mysql 排序优化
  13. Mysql控制流语句
  14. node 获取表单数据 为空_寻offer之JS数据结构与算法 -- 栈
  15. noip2009 普及组
  16. vs2017远程编译linux教程,Visual Studio 2017 远程编译调试 Linux 上已存在的通过 Samba 共享的 CMake 工程...
  17. 管理感悟:你说负责,关键在于怎样负责?
  18. 专业视频压制神器下载——解决会声会影、PR、AE处理视频后过大的问题(三款工具)专业视频压制软件
  19. nas文件服务器权限安全,大势至局域网共享文件监控NAS文件权限设置的方法
  20. 微带天线:介质的材料分析

热门文章

  1. 20150411--Dede二次开发-01
  2. BZOJ 1597: [Usaco2008 Mar]土地购买( dp + 斜率优化 )
  3. 使用 Flash Builder 的 Apple iOS 开发过程
  4. 双击进入物料数据的指定视图
  5. PHP 利用AJAX获取网页并输出(原创自Zjmainstay)
  6. ASP.NET性能调整之解决Server Too Busy错误
  7. python批量pdf转word,python批量实现Word文件转换为PDF文件
  8. linux sftp 重命名,linux下ssh/sftp配置和权限设置
  9. python的flask实现接口_使用python的Flask实现一个接口mock数据(傻瓜教程)
  10. 西北师范计算机考研调剂,西北师范大学研究生调剂