2022-04-20:小团去参加军训,军训快要结束了, 长官想要把大家一排n个人分成m组,然后让每组分别去参加阅兵仪式, 只能选择相邻的人一组,不能随意改变队伍中人的位置, 阅兵仪式上会进行打分,其中
2022-04-20:小团去参加军训,军训快要结束了,
长官想要把大家一排n个人分成m组,然后让每组分别去参加阅兵仪式,
只能选择相邻的人一组,不能随意改变队伍中人的位置,
阅兵仪式上会进行打分,其中有一个奇怪的扣分点是每组的最大差值,
即每组最大值减去最小值,
长官想要让这分成的m组总扣分量最小,即这m组分别的极差之和最小。
长官正在思索如何安排中,就让小团来帮帮他吧。
答案2022-04-20:
动态规划。
时间复杂度:O(M * N * N)。
代码用rust编写。代码如下:
use rand::Rng;
fn main() {
let mut arr: Vec<isize> = vec![];
let n = rand::thread_rng().gen_range(10, 30);
println!("n = {}", n);
for i in 0..n {
arr.push(rand::thread_rng().gen_range(1, 1000));
}
println!("arr = {:?}", arr);
let m = rand::thread_rng().gen_range(1, n);
println!("m = {}", m);
let ret = min_score2(&mut arr, m);
println!("ret = {}", ret);
}
fn min_score2(arr: &mut Vec<isize>, m: isize) -> isize {
if m == 0 {
return 0;
}
let n: isize = arr.len() as isize;
let mut score: Vec<Vec<isize>> = vec![];
for i in 0..n {
score.push(vec![]);
for j in 0..n {
score[i as usize].push(0);
}
}
for i in 0..n {
let mut max = arr[i as usize];
let mut min = arr[i as usize];
score[i as usize][i as usize] = max - min;
for j in i + 1..n {
max = get_max(max, arr[j as usize]);
min = get_min(min, arr[j as usize]);
score[i as usize][j as usize] = max - min;
}
}
let mut dp: Vec<Vec<isize>> = vec![];
for i in 0..m + 1 {
dp.push(vec![]);
for j in 0..n {
dp[i as usize].push(0);
}
}
for i in 0..n {
dp[1][i as usize] = score[0][i as usize];
}
for split in 2..=m {
for i in split..n {
dp[split as usize][i as usize] = dp[(split - 1) as usize][i as usize];
for j in 1..=i {
dp[split as usize][i as usize] = get_min(
dp[split as usize][i as usize],
dp[(split - 1) as usize][(j - 1) as usize] + score[j as usize][i as usize],
);
}
}
}
//println!("dp = {:?}", dp);
return dp[m as usize][(n - 1) as usize];
}
fn get_max(a: isize, b: isize) -> isize {
if a > b {
a
} else {
b
}
}
fn get_min(a: isize, b: isize) -> isize {
if a < b {
a
} else {
b
}
}
执行结果如下:

2022-04-20:小团去参加军训,军训快要结束了, 长官想要把大家一排n个人分成m组,然后让每组分别去参加阅兵仪式, 只能选择相邻的人一组,不能随意改变队伍中人的位置, 阅兵仪式上会进行打分,其中的更多相关文章
- menu 一组 只能选择一个
menu 一组 只能选择一个 将属性表的 groupindex 给一个值,假设你有三个Lang选项 就把这三个 manuitemex.groupindex 都设成同一个编号 (ex: 10) 以及把 ...
- Jquery EasyUI Combotree只能选择叶子节点且叶子节点有多选框
Jquery EasyUI Combotree只能选择叶子节点且叶子节点有多选框 Jquery EasyUI Combotree单选框,Jquery EasyUI Combotree只能选择叶子节点 ...
- 【问题收集·知识储备】Xcode只能选择My Mac,不能选择模拟器如何解决?
网友问题:请问打开一个应用,只能选择My Mac,不能选择模拟器如何解决? 答案: 下面将问答过程记录如下: CHENYILONG Blog 请问打开一个应用,只能 ...
- 要做重试机制,就只能选择 DelayQueue ?其实 RabbitMQ 它上它也行!
原文链接:要做重试机制,就只能选择 DelayQueue ?其实 RabbitMQ 它上它也行! 一.场景 最近研发一个新功能,后台天气预警:后台启动一条线程,定时调用天气预警 API,查询现有城市的 ...
- 2022.02.20 SA
2022.02.20 SA 如果我还能看见明天黎明,如果我还能再爬起来,我仍会走我的路,哪怕这条路已经荒废许久,也许我们无法拥有感情,我们甚至无法像个正常人一样接受太阳的洗礼,但是我依然会执行我的条约 ...
- c# winform DataGridView单击选中一整行,只能单选,不能选择多行,只能选择一行
设置DataGridView的属性SelectionMode为FullRowSelect 这样就使DataGridView不是选择一个字段,而是选择一整行了 设置DataGridView的属性Mult ...
- plupload 限制上传数量 只能选择一张图片上传
var files=[];var errors=[]; var chunk=<%=request.getParameter("chunk")%>; ...
- openstack安装系列问题:window7 64位安装的virtualBox 只能选择32位的系统安装不能选择64位的系统安装
个人原创,转载请注明作者,出处,否则依法追究法律责任 2017-10-03-12:22:22 现象:window7 64位安装的virtualBox 只能选择32位的系统安装不能选择64位的系统安装 ...
- My97设置开始、结束 时间区间及输入框不能输入只能选择的方法
时间区间开始: <input type="text" id = "first_time" name="first_time" valu ...
- 1、用datetimepicker插件实现限定时间范围的选择 2、时间插件实现默认当天的时间和只能选择小于今天的日期
一.用datetimepicker插件实现限定时间范围的选择 1.下面是要实现的效果图,让开始时间只能从 2018-7-1 到 2018-7-7 选择. 2.html的结构 <div cla ...
随机推荐
- 解决Python写入yaml后排版混乱还丢失注释问题
转载https://www.cnblogs.com/jiahm/category/1530828.html 大家有没有遇到过在使用Python进行yaml文件写入数据后,内容排版混乱并且丢失注释问题, ...
- python def函数总结(格式、参数类型、传参方式、全局变量/局部变量、参数类型提示(Type Hints))
简单无参函数 编写脚本test1.py def register_user(): #函数名称只使用小写字母和下划线 """docstring""&qu ...
- 深入理解 Python 虚拟机:元组(tuple)的实现原理及源码剖析
深入理解 Python 虚拟机:元组(tuple)的实现原理及源码剖析 在本篇文章当中主要给大家介绍 cpython 虚拟机当中针对列表的实现,在 Python 中,tuple 是一种非常常用的数据类 ...
- 写Java程序有感
最近我练习了Java的学生管理系统的程序代码,多亏了前段时间小学期的系统类练习,让我比较容易地就能够理解该题的题意,再根据我学到的相关的Java知识,就好像是一个套用公式的逻辑. 用到的相关知识: 1 ...
- 解读 Servlet 源码:GenericServlet,ServletConfig,ServletContext
解读 Servlet 源码:GenericServlet,ServletConfig,ServletContext 每博一文案 人活着,就得随时准备经受磨难.他已经看过一些书,知道不论是普通人还是了不 ...
- 【Visual Leak Detector】QT 中 VLD 输出解析(二)
说明 使用 VLD 内存泄漏检测工具辅助开发时整理的学习笔记. 目录 说明 1. 使用方式 2. 有一处内存泄漏时的输出报告(int 型) 3. 有一处内存泄漏时的输出报告(int 数组型) 1. 使 ...
- Centos7安装配置MySQL 5.6
Centos7安装配置MySql 5.6 首先下载MySql5.6的安装包,具体安装方式分为yum安装与离线安装.在新版本的CentOS7中,默认的数据库已更新为了Mariadb,而非 MySQL. ...
- 代码Bug太多?给新人Code Review头都大了?快来试试SpotBugs
如果你需要一个自动化的工具帮助你或者你的团队发现代码中的缺陷,在提升代码质量同时减少人工Code Review的成本,那这篇文章非常的适合你.本文围绕SpotBugs与Gradle集成,将相关配置和使 ...
- [MYSQL/JDBC]mysql-connector-java与MySQL、JDK对应的兼容版本[转载]
1 文由 MYSQL 数据库版本 与 驱动版本之间的兼容性,可能会涉及到 部分数据库特性(函数.语法)等是否能够正常使用的问题. 2 兼容性: mysql-connector-java VS Mysq ...
- $el,$nextTick,$set
this.$el this.$el DOM的根元素 => 是一个完全唯一的 $el 直到组件挂载完成 (mounted) 之前都会是 undefined. 对于单一根元素的组件,$el 将会指向 ...