题目描述

有 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


/*
思路:
因为有正有负,负负得正,所以要维护两个dp数组,一个存储最大,一个存储最小。
定义fm[k][i]表示当选中了k个学生,并且以第i个学生为结尾,所产生的最大乘积;
fn[k][i]表示当选中了k个学生,并且以第i个学生为结尾,所产生的最小乘积;
那么fm[k+1][i+1]=max(fm[k][i]*stu[i+1],fn[k][i]*stu[i+1]),
即当选中了k个学生后,再选择第i+1编号学生,所产生的最大乘积;
然而,并不能保证上一次选择的就是第i个学生,所以要遍历子数组fm[k],
令j从i到1,并且j与i+1之间小于间隔D,遍历fm[k][j],以及fn[k][j];
同理fn[k+1][i+1]=min(fn[k][i]*stu[i+1],fm[k][i]*stu[i+1])。
最后,遍历一遍fm[K][i]求得最大值(i从1~N)。
*/

#include<iostream>
#include <climits>
using namespace std;
int main(){int N,K,D,i,j,k;long long stu[50],fmax[11][51] = {LONG_LONG_MIN},fmin[11][51] = {LONG_LONG_MAX},res = LONG_LONG_MIN;while(cin >> N){for(i=0;i<N;i++)cin >> stu[i];cin >> K >> D;for(i=1;i<=N;i++){fmax[1][i]=fmin[1][i]=stu[i-1];for(k=2;k<=K;k++){for(j=i-1;j>=k-1 && i-j<=D;j--){// fmax[k][i]和fmin[k][i]需要满足i>=k.fmax[k][i]=max(fmax[k][i],max(fmax[k-1][j]*stu[i-1],fmin[k-1][j]*stu[i-1]));fmin[k][i]=min(fmin[k][i],min(fmin[k-1][j]*stu[i-1],fmax[k-1][j]*stu[i-1]));}}res=max(res,fmax[K][i]);}cout << res << endl;;}return 0;
}

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

  1. 华为:N个同学站成一排,发饼干至少每人一个,相邻分值高的可以多分一个以上饼干,求问至少需要发多少个饼干满足要求

    N个同学站成一排,发饼干至少每人一个,相邻分值高的可以多分一个以上饼干,求问至少需要发多少个饼干满足要求 华为面试被问手撕这道题. 输入分值:[1,2,3] 输出:5 解析:3+1+1 = 5. 但是 ...

  2. 二十年后我发明了保姆机器人作文_小学生作文“二十年后的我”走红,老师看完气愤,让学生站着听课...

    文/艾小贝爱教育 写作业同时也是检验各位学生对课堂上老师所讲述知识点掌握程度的直接反馈,作文的作业一般是让学生直接在课堂上写完就当场交,还是放学回家去完成呢. 各位学生对于写作业是很熟悉的了,就像每天 ...

  3. java实现原数组根据下标分隔成两个子数组并且在原数组中交换两个子数组的位置...

    此类实现: 输出一行数组数据,根据输入的下标,以下标位置为结束,将原数组分割成两组子数组. 并交换两个子数组的位置,保持子数组中的元素序号不变. 如:原数组为7,9,8,5,3,2 以下标3为分割点, ...

  4. 设有n个正整数,将他们连接成一排,组成一个最大的多位整数

    题目描述: 设有n个正整数,将他们连接成一排,组成一个最大的多位整数. 如:n=3时,3个整数13,312,343,连成的最大整数为34331213. 如:n=4时,4个整数7,13,4,246连接成 ...

  5. 1438. 绝对差不超过限制的最长连续子数组

    链接:1438. 绝对差不超过限制的最长连续子数组 题解: https://leetcode-cn.com/problems/longest-continuous-subarray-with-abso ...

  6. 力扣刷题笔记:1438. 绝对差不超过限制的最长连续子数组(滑窗模板题,选择有序列表SortedList()数据类型就不会超时)

    题目: 1438.绝对差不超过限制的最长连续子数组 给你一个整数数组 nums ,和一个表示限制的整数 limit,请你返回最长连续子数组的长度,该子数组中的任意两个元素之间的绝对差必须小于或者等于 ...

  7. [leetcode]1438. 绝对差不超过限制的最长连续子数组

    个人博客:https://javaniuniu.com/ 难度:中等 本题涉及算法: 滑动窗口 思路:滑动窗口 类似题型: 3. 无重复字符的最长子串 5393. 可获得的最大点数 题目 1438. ...

  8. 茶杯:N个杯子排成一排,第X个杯子藏有球,交换任意两个杯子K次后,找出藏球杯子位置。

    N个杯子排成一排,第X个杯子藏有球,交换任意两个杯子K次后,找出藏球杯子位置. (本文获得CSDN质量评分[92]) [学习的细节是欢悦的历程] Python 官网:https://www.pytho ...

  9. 阿里云助力中小企业建站 在线免费自助建站成新用户首选

    阿里云助力中小企业建站 在线免费自助建站成新用户首选 提供云计算服务的行业头部企业-阿里云,对于广大中小企业来说,应该都不陌生.在企业需要建设自己官方网站,或者个人需要建设个人网站时,一般都需要购买网 ...

最新文章

  1. String类的学习
  2. 为什么阿里巴巴禁止把SimpleDateFormat定义为static类型的?
  3. 源码安装gcc各种情况的解决
  4. JS判断页面控件是否可用
  5. MYSQL MVCC实现及其机制
  6. python爬去朋友圈_利用Python爬取朋友圈数据,爬到你开始怀疑人生
  7. 众成翻译2.0上线,翻译即有机会获赠图书
  8. PHP实时生成并下载超大数据量的EXCEL文件 1
  9. 蓝桥杯 ADV-178 算法提高 简单加法
  10. No WebApplicationContext found: no ContextLoaderListener registered?
  11. Sharepoint学习笔记---SPList--External List因BCS的Throttling limit 节流限制导致的错误
  12. 计算机组策略无法编辑,win7系统无法打开本地组策略编辑器的解决方法
  13. 零知识证明:一个基于zk-SNARKs的Mastermind棋盘游戏
  14. HG30A-3多用表校验仪
  15. 介绍一下xgb_珍藏版 | 20道XGBoost面试题,你会几个?(上篇)
  16. shader拖尾_拖尾效果 - LouisSong - 博客园
  17. O2O口号容易运营难
  18. 在家如何用手机赚钱,小编来为你一一解答!
  19. Shiro(三) Shiro核心原理分析
  20. 明厨亮灶监控系统解决方案,看得见的食品安全

热门文章

  1. 邓紫棋歌曲计算机音乐数字,邓紫棋播放量最高的十首歌曲
  2. quill上传本地视频(保姆级教学)
  3. [css] 【转载】 精简高效的CSS命名准则/方法
  4. win7做服务器性能如何,win7如何做服务器配置
  5. CSS解决hover选择器生硬效果
  6. imag在matlab,Matlab基本函数-imag函数 | 学步园
  7. 简单排查java应用CPU飙高的线程问题
  8. PTA数字金字塔(PTA怎么用以及代码怎么敲)
  9. M八七电影《新·奥特曼》主题曲歌手:米津玄師罗马音注释
  10. 密码学---攻击类型