合唱团算法(DP问题)
题目:有 n 个学生站成一排,每个学生有一个能力值,牛牛想从这 n 个学生中按照顺序选取 k 名学生,要求相邻两个学生的位置编号的差不超过 d,使得这 k 个学生的能力值的乘积最大,你能返回最大的乘积吗?
类似于前面写到的LSI最长递增子序列,
只不过这里控制了选取K个,
所以这里定义了一个最大数据结构fm[i][j] 其中表示选取了i+1个学生,以j结束(选取了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]))
代码如下:
n
=
int
(
raw_input
())
arr
=
map
(
int
,
raw_input
().split())
K,D
=
map
(
int
,
raw_input
().split())
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]
for
i
in
range
(n):
for
k
in
range
(
1
,K):
#for j in range(i-1,-1,-1):
for
j
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问题)相关推荐
- 蓝桥杯 算法 DP 印章 java
目录: 题目描述 题目思路 代码段 题目描述 资源限制 内存限制:256.0MB C/C++时间限制:1.0s Java时间限制:3.0s Python时间限制:5.0s 问题描述 共有n ...
- 曲线抽稀 java_Python实现曲线点抽稀算法
目录 何为抽稀 道格拉斯-普克(Douglas-Peuker)算法 垂距限值法 最后 正文 何为抽稀 在处理矢量化数据时,记录中往往会有很多重复数据,对进一步数据处理带来诸多不便.多余的数据一方面浪费 ...
- 九章算法笔记D2-坐标型动态规划
tags: 算法 DP 动态规划 大家觉得写还可以,可以点赞.收藏.关注一下吧! 也可以到我的个人博客参观一下,估计近几年都会一直更新!和我做个朋友吧!https://motongxue.cn 文章目 ...
- 动态规划(dp)总结
问题 T: [动态规划]质数和分解 题目描述 任何大于1的自然数n,都可以写成若干个大于等于2且小于等于n的质数之和的形式(包括只有一个数构成的和表达式的情况),并且可能有不止一种质数和的形式.例如9 ...
- 计算机算法设计与分析(第五版)---王晓冬--------前六章(递归与分治,动态规划,贪心算法,回溯法,)期末复习资料总结
--1-- 算法:解决问题的一种方法或者一个求解过程 是若干指令的序列 输入 输出 有限性 确定性 程序:用某种设计语言对算法的具体实现 可以不满足 有限性 程序 = 算法+数据结构 果子合并问题( ...
- 最长上升子序列(O(nlogn))算法并输出最长上升子序列
最长上升子序列普通算法 dp[n]表示以a[n]结尾的最长上升子序列长度 显然有 dp[n]=max(dp[n],dp[i]+1) 满足a[i]<a[n],1<=i<n 实现过程时间 ...
- 打表+dp思维+博弈
E. Sending a Sequence Over the Network 应该属于一个经典dp,可惜我没做出来... 思路:对于一个数字来说,它可以向左扩展,也可以向有扩展. 设计状态:f[i]表 ...
- JAVA算法:回文字符串相关问题详解(回文字符串总结)
JAVA算法:回文字符串相关问题详解(回文字符串总结) Q1. 编写一个工具方法判断给定的字符串是否为回文字符串 例如:给定一个字符串"aabbaa",判断该字符串是否为回文字符串 ...
- 蓝桥练习---------算法训练 无聊的逗
问题描述 逗志芃在干了很多事情后终于闲下来了,然后就陷入了深深的无聊中.不过他想到了一个游戏来使他更无聊.他拿出n个木棍,然后选出其中一些粘成一根长的,然后再选一些粘成另一个长的,他想知道在两根一样长 ...
最新文章
- html中base标签的使用,和简介
- myeclipse设置
- Python2安装教程(以最终版本Python2.7.18为例)
- C++中给二维指针分配内存
- explian执行计划
- Maven基础了解及配置信息
- Java类名与包名不区分大小写
- ASP.NET Aries 入门开发教程2:配置出一个简单的列表页面
- 图的广度优先遍历和深度优先遍历
- 【Essay】开始研究生小论文的撰写
- WebStorm中文HTML编辑开发工具
- 小米手机浏览器部分图片显示异常
- Oracle实现网吧计费系统,毕业设计(论文)-网吧计费管理系统设计.doc
- go基础:xml解析
- 基于Unity3D的语音转文字功能的实现
- 个人所得税计算java版
- openlayers中绘制态势箭头、进击箭头、钳击箭头等
- 电商评论文本情感分类(中文文本分类)(第二部分-Bert)
- 关于计算机运行管理模式,浅谈学校计算机机房管理及维护运行模式.docx
- java什么是this_java中的this是什么
热门文章
- 开工第一天,这个超时问题把我干趴下了
- 知乎高赞:Serverless 能取代微服务吗?
- 美国热搜 “1个字形容2020年”:IBM 的代码回复太太太亮了!
- 实践 | Element UI + Vue 管理系统首页
- 搞到一个IDEA插件,H哥30秒生成一个Spring Cloud Alibaba工程
- 你还在代码里做读写分离么,试试这个中间件吧!
- Jeewx-api 1.1 版本发布,微信极速 SDK
- MySQL基础篇(04):存储过程和视图,用法和特性详解
- Phase retrieval交替投影
- vue 1.0源代码重点难点分析