牛客网,合唱团

AI权益加码!Claude Code、Cursor等20+工具免费用! 购周边限时加赠Coding Plan Lite,畅享主流AI工具!学习进阶更高效! 阅读详情

题目描述

有 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

动态规划,Maxability[i][j]表示以i为末尾的,选出的j个数最大乘积那么求Maxability[i][j+1]则要考虑从Maxability[i-d][j] *a[i]到Maxability [i-1][j]*a[i]取最大的那个,又由于有负数,所以还要定义一个最小乘积,

代码:

#include <iostream>
#include <math.h>
#include <stdio.h>
using namespace std;
int main() {
    long long int Maxability[60][20],Minability[60][20],maa;
    int ability[60];
    int n;
    cin>>n;
    for(int i=0;i<n;i++)
        cin>>ability[i];///存入能力值
    int k,b;
    cin>>k>>b;
    for(int i=0;i<n;i++)
    {
        Maxability[i][0]=ability[i];///表示以i为末尾只取一个人的最大能力值
        Minability[i][0]=ability[i];///表示以i为末尾只取一个人的最小能力值
        for(int j=1;j<k;j++)
        {
            for(int t=i-1;t>=max(i-b,0);t--){
                Maxability[i][j]=max(Maxability[i][j],Maxability[t][j-1]*ability[i]);
                Maxability[i][j]=max(Maxability[i][j],Minability[t][j-1]*ability[i]);
                Minability[i][j]=min(Minability[i][j],Maxability[t][j-1]*ability[i]);
                Minability[i][j]=min(Minability[i][j],Minability[t][j-1]*ability[i]);
            }

        }
    }
    maa=Maxability[0][k-1];
    for(int i=1;i<n;i++)
    {
        maa=max(maa,Maxability[i][k-1]);
    }
    cout<<maa<<endl;
}













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

相关推荐

牛客网编程题——合唱团(网易2017)

    这题在编程达人面前应该算是水题,但这算是我第一个做出来的动态规划程序,作为纪念,分享一下。题目链接:https://www.nowcoder.com/practice/661c49118ca241909add3a11c96408c8?tpId=85&amp;tqId=29830&amp;tPage=1&amp;rp=1&amp;ru=/ta/2017test&amp;qru=/ta/201...

banana_cjb的博客 2157

动态规划-牛客-HJ24 合唱队

描述 N 位同学站成一排,音乐老师要请最少的同学出列,使得剩下的 K 位同学排成合唱队形。 设KK位同学从左到右依次编号为 1,2…,K ,他们的身高分别为T_1,T_2,…,T_KT1​,T2​,…,TK​,若存在i(1\leq i\leq K)i(1≤i≤K)使得T_1<T_2<......<T_{i-1}<T_iT1​<T2​<......<Ti−1​<Ti​且T_i>T_{i+1}>......>T_KTi​>Ti...

dailinqing1984的博客 332

合唱团》算法解析(含思路解答示意图)【牛客网编程题——JAVA实现】

【考点:动态规划】动态规划变形,难度指数上升题目描述有 n 个学生站成一排,每个学生有一个能力值,牛牛想从这 n 个学生中按照顺序选取 k 名学生,要求相邻两个学生的位置编号的差不超过 d,使得这 k 个学生的能力值的乘积最大,你能返回最大的乘积吗?输入描述每个输入包含 1 个测试用例。每个测试数据的第一行包含一个整数 n (1 &lt;= n &lt;= 50),表示学生的个数,接下来的一行,包...

罗先森何其有幸的博客 4087

牛客网华为机试-合唱团

题目描述 计算最少出列多少位同学,使得剩下的同学排成合唱队形 说明: N位同学站成一排,音乐老师要请其中的(N-K)位同学出列,使得剩下的K位同学排成合唱队形。 合唱队形是指这样的一种队形:设K位同学从左到右依次编号为1,2…,K,他们的身高分别为T1,T2,…,TK,则他们的身高满足存在i(1<=i<=K)使得T1<T2<......<Ti-1<Ti>Ti+1>......>TK。 你的任务是,已知所有N位同学的身高,计算最少需要几位同学...

不爱吃鱼的程序猿 2350

合唱团 -- 牛客网

1.题目描述: 有 n 个学生站成一排,每个学生有一个能力值,牛牛想从这 n 个学生中按照顺序选取 k 名学生,要求相邻两个学生的位置编号的差不超过 d,使得这 k 个学生的能力值的乘积最大,你能返回最大的乘积吗? 2.题目解析: 题目要求n各学生中选择k个,使这k个学生的能力值乘积最大。这是一个最优化的问题。另外,在优化过程 中,提出了相邻两个学生的位置编号差不超过d的约束。解决的方法是采...

我是扣肉呀~ 449

牛客编程题——合唱团

然后,它的子问题,需要从start前面的left个人里面,选择k-1个,这里left表示k-1个人中最后一个(即第k-1个)人的位置,因此,子问题可以表示成f[left][k-1].有 n 个学生站成一排,每个学生有一个能力值,牛牛想从这 n 个学生中按照顺序选取 k 名学生,要求相邻两个学生的位置编号的差不超过 d,使得这 k 个学生的能力值的乘积最大,你能返回最大的乘积吗?从n个学生中选择k个,可以看成是先选出第k个学生,再从剩下学生中选出k个。此处g[][]是存储n个选k个能力值乘积的最小值数组。

qq_65390271的博客 315

合唱团 牛客网动态规划题目

动态规划比较有趣的题型

GD_small_bit的博客 638

牛客网合唱团

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

~★sunshine☆的博客专栏 737

牛客网合唱团

n = 3 arr = [7,4,7] K,D = 2,50 fm = [([0] * n) for i in range(K)] # k*d fn = [([0] * n) for i in range(K)] # k*d res = 0 # for i in range(n): # fm[0][i] = arr[i] # fn[0][i] = arr[i] # # fo...

weixin_38314447的博客 399

牛客网 合唱团

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

Dan的专栏 772

牛客网2017校招真题--合唱团

                           牛客网2017校招真题--合唱团 题目描述   解题思路 代码 #include&lt;iostream&gt; #include&lt;vector&gt; #include&lt;algorithm&gt;                                                          ...

南方有乔木的博客 352

牛客网2017校招真题在线编程之合唱团问题——动态规划问题首秀

牛客网2017校招真题在线编程之合唱团问题——动态规划问题首秀 先贴题目 题目描述 有 n 个学生站成一排,每个学生有一个能力值,牛牛想从这 n 个学生中按照顺序选取 k 名学生,要求相邻两个学生的位置编号的差不超过 d,使得这 k 个学生的能力值的乘积最大...

diedingpeng7793的博客 274

牛客网-网易2017笔试 合唱团(dp)

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

riba2534的博客 491

合唱团_牛客网【动态规划实现】

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

ty6693的博客 468

动态规划:合唱团问题解析(二)

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

weixin_30553065的博客 177

[笔试训练](三十二)094:素数回文095:活动安排096:合唱团

2.当前一个活动的结束时间晚于后一个活动的开始时间,活动重叠,ret不变,同时更新两个活动结束时间的较早值(最先结束的活动),好与再后一个活动比较。1.将同一个活动的开始时间和结束时间组成一个pair<LL,LL>,将pair排序后,逐个分情况讨论。3.当前一个活动的结束时间早于后一个活动的开始时间,活动不重叠,ret++。

m0_64476561的博客 471

牛客网--动态规划(C++) 合唱团

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

Reality 827
上一篇: IP判断
下一篇: 2018蓝桥杯省赛和天梯赛总结
梦里的星空
博客等级 码龄10年 30粉丝 126原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值