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

类似于前面写到的LSI最长递增子序列,
    只不过这里控制了选取K个,所以这里定义了一个最大数据结构fm[i][j] 其中表示选取了i+1个学生,以j结束(选取了j为结尾)最大值
    这里数组可能有负数,所以定义了一个最小数据结构fn[i][j]

迭代的数据结构:

fm[k][i] = max(fm[k][i],max(fm[k-1][j]*arr[i], fn[k-1][j]*arr[i]))

           fn[k][i] = min(fn[k][i],min(fm[k-1][j]*arr[i], fn[k-1][j]*arr[i]))

代码如下:
= int(raw_input())
arr = map(int,raw_input().split())
K,D = map(int,raw_input().split())
fm = [ ([0]*n) for in range(K) ] # k*d
fn = [ ([0]*n) for in range(K) ] # k*d
res=0
for in range(n):
    fm[0][i]=arr[i]
    fn[0][i]=arr[i]
for in range(n):
    for in range(1,K):
        #for j in range(i-1,-1,-1):
        for in range(i-1,max(0,i-D)-1,-1):
            #if (i-j<D and k>0):
                fm[k][i] = max(fm[k][i],max(fm[k-1][j]*arr[i], fn[k-1][j]*arr[i]))
                fn[k][i] = min(fn[k][i],min(fm[k-1][j]*arr[i], fn[k-1][j]*arr[i]))
                #fm[k][i] = max(fm[0][i],max(fm[k-1][j]*arr[i], fn[k-1][j]*arr[i]))
                #fn[k][i] = min(fn[0][i],min(fm[k-1][j]*arr[i], fn[k-1][j]*arr[i]))
                #fm[k][i] = max(fm[k-1][j]*arr[i], fn[k-1][j]*arr[i])
                #fn[k][i] = min(fm[k-1][j]*arr[i], fn[k-1][j]*arr[i])
    res=max(res,fm[K-1][i])
print res

合唱团算法(DP问题)相关推荐

  1. 蓝桥杯 算法 DP 印章 java

    目录: 题目描述 题目思路 代码段 题目描述 资源限制 内存限制:256.0MB   C/C++时间限制:1.0s   Java时间限制:3.0s   Python时间限制:5.0s 问题描述 共有n ...

  2. 曲线抽稀 java_Python实现曲线点抽稀算法

    目录 何为抽稀 道格拉斯-普克(Douglas-Peuker)算法 垂距限值法 最后 正文 何为抽稀 在处理矢量化数据时,记录中往往会有很多重复数据,对进一步数据处理带来诸多不便.多余的数据一方面浪费 ...

  3. 九章算法笔记D2-坐标型动态规划

    tags: 算法 DP 动态规划 大家觉得写还可以,可以点赞.收藏.关注一下吧! 也可以到我的个人博客参观一下,估计近几年都会一直更新!和我做个朋友吧!https://motongxue.cn 文章目 ...

  4. 动态规划(dp)总结

    问题 T: [动态规划]质数和分解 题目描述 任何大于1的自然数n,都可以写成若干个大于等于2且小于等于n的质数之和的形式(包括只有一个数构成的和表达式的情况),并且可能有不止一种质数和的形式.例如9 ...

  5. 计算机算法设计与分析(第五版)---王晓冬--------前六章(递归与分治,动态规划,贪心算法,回溯法,)期末复习资料总结

    --1--  算法:解决问题的一种方法或者一个求解过程 是若干指令的序列 输入 输出 有限性 确定性 程序:用某种设计语言对算法的具体实现 可以不满足 有限性 程序 = 算法+数据结构 果子合并问题( ...

  6. 最长上升子序列(O(nlogn))算法并输出最长上升子序列

    最长上升子序列普通算法 dp[n]表示以a[n]结尾的最长上升子序列长度 显然有 dp[n]=max(dp[n],dp[i]+1) 满足a[i]<a[n],1<=i<n 实现过程时间 ...

  7. 打表+dp思维+博弈

    E. Sending a Sequence Over the Network 应该属于一个经典dp,可惜我没做出来... 思路:对于一个数字来说,它可以向左扩展,也可以向有扩展. 设计状态:f[i]表 ...

  8. JAVA算法:回文字符串相关问题详解(回文字符串总结)

    JAVA算法:回文字符串相关问题详解(回文字符串总结) Q1. 编写一个工具方法判断给定的字符串是否为回文字符串 例如:给定一个字符串"aabbaa",判断该字符串是否为回文字符串 ...

  9. 蓝桥练习---------算法训练 无聊的逗

    问题描述 逗志芃在干了很多事情后终于闲下来了,然后就陷入了深深的无聊中.不过他想到了一个游戏来使他更无聊.他拿出n个木棍,然后选出其中一些粘成一根长的,然后再选一些粘成另一个长的,他想知道在两根一样长 ...

最新文章

  1. html中base标签的使用,和简介
  2. myeclipse设置
  3. Python2安装教程(以最终版本Python2.7.18为例)
  4. C++中给二维指针分配内存
  5. explian执行计划
  6. Maven基础了解及配置信息
  7. Java类名与包名不区分大小写
  8. ASP.NET Aries 入门开发教程2:配置出一个简单的列表页面
  9. 图的广度优先遍历和深度优先遍历
  10. 【Essay】开始研究生小论文的撰写
  11. WebStorm中文HTML编辑开发工具
  12. 小米手机浏览器部分图片显示异常
  13. Oracle实现网吧计费系统,毕业设计(论文)-网吧计费管理系统设计.doc
  14. go基础:xml解析
  15. 基于Unity3D的语音转文字功能的实现
  16. 个人所得税计算java版
  17. openlayers中绘制态势箭头、进击箭头、钳击箭头等
  18. 电商评论文本情感分类(中文文本分类)(第二部分-Bert)
  19. 关于计算机运行管理模式,浅谈学校计算机机房管理及维护运行模式.docx
  20. java什么是this_java中的this是什么

热门文章

  1. 开工第一天,这个超时问题把我干趴下了
  2. 知乎高赞:Serverless 能取代微服务吗?
  3. 美国热搜 “1个字形容2020年”:IBM 的代码回复太太太亮了!
  4. 实践 | Element UI + Vue 管理系统首页
  5. 搞到一个IDEA插件,H哥30秒生成一个Spring Cloud Alibaba工程
  6. 你还在代码里做读写分离么,试试这个中间件吧!
  7. Jeewx-api 1.1 版本发布,微信极速 SDK
  8. MySQL基础篇(04):存储过程和视图,用法和特性详解
  9. Phase retrieval交替投影
  10. vue 1.0源代码重点难点分析