OpenJudge 7624 山区建小学

动态规划——openjudge7624山区建小学 题目: 描述 政府在某山区修建了一条道路,恰好穿越总共m个村庄的每个村庄一次,没有回路或交叉,任意两个村庄只能通过这条路来往。已知任意两个相邻的村庄之间的距离为di(为正整数),其中,0 < i < m。为了提高山区的文化素质,政府又决定从m个村中选择n个村建小学(设 0 < n < = m < 500 )。请根据给定的m、n以及所有相邻村庄的距离,选择在哪些村庄建小学,才使得所有村到最近小学的 阅读详情

在openjudge似乎无法凭题号搜到题...?


总时间限制: 
1000ms 
内存限制: 
65536kB
描述

政府在某山区修建了一条道路,恰好穿越总共m个村庄的每个村庄一次,没有回路或交叉,任意两个村庄只能通过这条路来往。已知任意两个相邻的村庄之间的距离为di(为正整数),其中,0 < i < m。为了提高山区的文化素质,政府又决定从m个村中选择n个村建小学(设 0 < n < = m < 500 )。请根据给定的m、n以及所有相邻村庄的距离,选择在哪些村庄建小学,才使得所有村到最近小学的距离总和最小,计算最小值。

输入
第1行为m和n,其间用空格间隔
第2行为(m-1) 个整数,依次表示从一端到另一端的相邻村庄的距离,整数之间以空格间隔。

例如
10 3
2 4 6 5 2 4 3 1 3
表示在10个村庄建3所学校。第1个村庄与第2个村庄距离为2,第2个村庄与第3个村庄距离为4,第3个村庄与第4个村庄距离为6,...,第9个村庄到第10个村庄的距离为3。
输出
各村庄到最近学校的距离之和的最小值。
样例输入
10 2
3 1 3 1 1 1 1 1 3
样例输出
18

“明确告诉你是动规题,还不会做吗?”

“还是不会”


思路一开始就有了,但是实现起来还怪麻烦的


根据题意,我们可以把这些村庄间的道路连成了一条长链。想象一下这条链从左到右延伸,上面的某些结点已经建了学校,我们在这些结点的右侧找一个结点a,建一个新的学校。

新学校管辖的结点范围有多大呢?

结点a右边的村庄全部应该受a学校管辖(想一想,为什么),结点左边的学校则需要枚举判断了。

在决策结点a的学校之前,我们应该已经决策了另外一些已建好的学校,它们的决策方式和上面是相同的。

假设我们已经决策过i-1个村庄是否建了学校,正在决策第i个,之前建好的学校管辖范围是1~k,那么新学校的管辖范围应该是k+1~m,(k的范围是"已有学校数"~m-1)

        设f[决策的村庄数][建的小学数]=题目要求的距离,s[管辖区起点][管辖区终点]=这片辖区内建一个学校,区内村庄到学校的距离和。

f[i][j]=min(f[i][j],f[k][j-1]+s[k+1][i])



下面上代码

#include<iostream>
#include<cstdio>
#include<algorithm>
#include<cmath>
using namespace std;
const int inf=99999999;
int f[510][510];
int dis[510][510];//从i到j距离 
int d[510];
int s[510][510];
//s[管辖区起点][管辖区终点]=这片辖区内建一个学校,区内村庄到学校的距离和
int n,m;
int dist(int i,int j){
	int x=0;
	int mid=(i+j)/2;
	for(int k=i;k<=j;k++)
	  x+=dis[k][mid];
	return x;
}

int main(){
	scanf("%d%d",&m,&n);
	int i,j,x;
	for(i=2;i<=m;i++){//从2开始,方便求各村庄间距离
		scanf("%d",&x);
		d[i]=d[i-1]+x;
	}
	//
	for(i=1;i<=m;i++)
	  for(j=1;j<=m;j++){
	  	if(i==j)dis[i][j]=0;
	  	else dis[i][j]=dis[j][i]=abs(d[j]-d[i]);
	  }//初始化两两距离 
	//
	for(i=1;i<=m;i++)
	  for(j=1;j<=m;j++)
	    s[i][j]=dist(i,j);
	//计算一个管辖从i到j村庄的学校到这些村庄的距离和
	//
	for(i=1;i<=m;i++)
	  for(j=1;j<=m;j++)
	    f[i][j]=inf;
	for(i=1;i<=m;i++)f[i][i]=0;
	for(i=1;i<=m;i++)f[i][1]=s[1][i];//只建一个学校的情况 
	//f初始化 
		
/*	//test
	for(i=1;i<=m;i++)
	  for(j=1;j<=m;j++)
	    printf("%d ",s[i][j]);    
*/  
	for(i=2;i<=m;i++){//村庄
		for(j=2;j<=min(i,n);j++){//学校 
			for(int k=j-1;k<=i-1;k++){//枚举已有的学校管辖的范围 
				if(i!=j)f[i][j]=min(f[i][j],f[k][j-1]+s[k+1][i]);
			}	
		} 
	}
	printf("%d",f[m][n]);
	
}


RK3588 部署 YOLOv5s 实战:多线程加速从 16FPS 飙升到 120FPS(含性能优化) 因为RK3588包含了3个NPU核心,支持3个核心同时工作、双核合作、以及单核工作。我们可以使用线程池来加速。线程池是一种长街的并发编程模型,它用于管理和复用线程,以提高多线程程序的性能和效率。线程池通常包含以下主要组件:1、任务队列:任务队列用于存储待执行的任务。这些任务可以是函数、方法或其他需要多线程环境中执行的操作。2、线程池管理:线程池管理器负责创建、销毁和管理线程。它会监视任务队列中的任务,根据需要创建线程,执行任务,并在任务完成后将线程放回池中以供重用。 阅读详情

相关推荐

基于STM32开发的智能语音控制系统

本文将介绍如何使用STM32微控制器开发一个智能语音控制系统,通过语音识别模块、OLED显示屏、Wi-Fi模块等实现对家用电器或其他设备的语音控制。智能语音控制系统的核心是STM32微控制器,通过语音识别模块识别用户的语音指令,并根据指令控制家用电器或其他设备。:定期测试语音识别模块、继电器控制模块、OLED显示屏和Wi-Fi模块的工作状态,确保系统能够在各种情况下正常运行,并保持智能语音控制系统的可靠性。本系统同样适用于办公环境,可以通过语音指令控制办公室设备,如照明、空调等,提供智能化的办公体验。

stm32d1219的博客 6911

信息学奥赛一本通 1197:山区建小学 | OpenJudge NOI 2.6 7624:山区建小学 | 洛谷 P4677 山区建小学

【题目链接】 ybt 1197:山区建小学 OpenJudge 2.6 7624:山区建小学 洛谷 P4677 山区建小学 【题目考点】 1. 动态规划:区间动规 2. 前缀和 【解题思路】 1. 求相邻多村中建一所小学,各村上学的最短距离 现在准备在第i村到第j村中建立一所小学,从第i村到第j村的学生都只能上这一所小学。考虑将小学建在哪个村里,可以使得第i到第j各村的学生上学距离加和最短? 上图用一条线段上的点表示各个村,包括第i,i+1,i+2,…,j-1,j村。 相邻两村之间的距离是已知的,第i到第

君义NOIP的博客 6009

2026年9月20日 2026年CSP-S初赛真题整理

这是本次考试最难的部分,涉及Gray Code(格雷码)+ 状态压缩 + 数学推导难点解决方案关键代码问题转化将得分差转化为m−2xim - 2x[i]m−2xi高效枚举Gray Code相邻状态O(1)转移奇偶判断利用奇偶性统一条件。

weixin_51184047的博客 629

信息学奥赛一本通 1197:山区建小学 递推算法

请根据给定的m、n以及所有相邻村庄的距离,选择在哪些村庄建小学,才使得所有村到最近小学的距离总和最小,计算最小值。对于5个村子的情况,如果我们把小学建在3号村,总路程长度为L,若我们把小学挪到2号村子,左边的1,2号村子减少了路程L2,右边的3,4,5号村子路程增加了L2,总路程增加了L2,同理,挪到4号村子,总路程增加L3,对于偶数个村子同理。第1个村庄与第2个村庄距离为2,第2个村庄与第3个村庄距离为4,第3个村庄与第4个村庄距离为6,...,第9个村庄到第10个村庄的距离为3。1197:山区建小学。

长春高老师编程 1302

网站进行企业微信授权登录(附带代码超详细版)

企业微信的扫码登录官方文档 https://work.weixin.qq.com/api/doc/90000/90135/90988 企业微信扫码登录认证流程 上面是官方的图片,看上去比较复杂。因此我用直白简洁的语言梳理下流程。 1、首先在自己的网站上获取到企业微信登录的二维码(二维码怎么获取稍后再说,这里想象下你已经有了一个二维码) 2、你拿着手机扫描二维码,确认登录之后,页面就会自己进行重定向的跳转,跳转的url如何配置下面再讲,但是注意,这个重定向的url可以是内网地址 3、重定向到指

Gzf的博客 1万+

STM32--LoRa通信模块

模块根据MD0的配置与AUX引脚的状态会进入不同的功能其中在通信功能下,包含4种工作模式。

qq_47258284的博客 1万+

【披着递推皮的动态规划】 山区建小学 题解

  今天小编随意写了一道老师布置的题,这是一道看起来很普通的题,我却不明白它为什么放在递推中……   废话不多说,直接看题。 ▍1197:山区建小学 【题目描述】 政府在某山区修建了一条道路,恰好穿越总共m个村庄的每个村庄一次,没有回路或交叉,任意两个村庄只能通过这条路来往。已知任意两个相邻的村庄之间的距离为di(为正整数),其中,0<i<m。为了提高山区的文化素质,政府又...

weixin_30947043的博客 1172

kaggle学习笔记-餐厅数据挖掘

分析Zomato数据集的基本思想是为了公平地了解影响在班加罗尔不同地方建立不同类型餐厅的因素,每个餐厅的总评级,班加罗尔是这样一个城市,拥有超过12,000家餐厅,餐厅供应来自世界各地的菜肴。每天都有新的餐馆开业,这个行业还没有饱和,需求也在与日俱增。然而,尽管需求不断增加,新餐馆却很难与老牌餐馆竞争。大多数餐厅都供应同样的食物。班加罗尔是印度的IT之都。这里的大多数人主要依靠餐馆的食物,因为他们没有时间自己做饭。由于对餐馆的需求如此巨大,因此研究一个地方的人口统计学就变得很重要。

优快云XXCQ的博客 1862

一本通_1197:山区建小学(尚贤)

【题目传送门】 话不多说,推荐好文一篇

广东省清远市博爱学校—尚贤的博客 2119

机器学习实战1-四种算法对比对客户信用卡还款情况进行预测与模型评估

大家好,我是微学AI,今天给大家带来一个机器学习实战案例:利用机器学习的四种算法对比对客户信用卡还款情况进行分类。信用卡又叫贷记卡,是由商业银行或信用卡公司对信用合格的消费者发行的信用证明。现在的年轻人,特别是80后,90后甚至00后到喜欢超前消费,每个人名下多多少少都有至少一张信用卡,有些人由于过度超前消费,导致下个月无法还款导致的逾期,这样会对个人征信产生影响,今天我们就来分析分析具有哪些特性的人会有信用卡逾期的可能。

微学AI的博客 4710

在 SAP 中启用应收/应付“代扣税(Withholding Tax)”功能,本质上是激活并配置“扩展代扣税(Extended Withholding Tax)”模型

摘要:SAP中启用应收/应付代扣税功能需完成3个层级12个核心步骤:1)全局激活公司代码代扣税功能;2)配置代扣税规则、税率和科目,包括定义税种类型、代码、总账科目等;3)在供应商/客户主数据中关联代扣税设置。完成后系统可在发票或付款环节自动计算并过账代扣税,支持多税种并行计算和税率年度调整,最终生成税务报表。常见问题排查需检查公司代码激活状态和主数据配置。(149字)

金牌架构师 836

信息学奥赛一本通1197:山区建小学

c[i][j]表示在第i个村庄和第j个村庄之间建一所小学(例如在第3个村庄和第7个村庄之间建一所小学),第i个村庄和第j个村庄之间的所有村庄到这所小学的最短距离;另外,f[i][1]表示在i个村庄中建1所小学,那么。第11个村庄与第22个村庄距离为22,第22个村庄与第33个村庄距离为44,第33个村庄与第44个村庄距离为66,...,第99个村庄到第1010个村庄的距离为33。从第i个村庄到第j个村庄的距离就等于从第i个村庄去第j-1个村庄,再从第j-1个村庄去第j个村庄之间的距离,递推式为。

m0_66498724的博客 2289

基于Simulink的电动车PMSM能量泄放与回收系统仿真设计

摘要 本文设计了一个基于Simulink的电动车PMSM能量泄放与回收系统仿真模型。系统采用分层建模方案,包含永磁同步电机(PMSM)矢量控制、电池管理和泄放功率计算等核心模块。通过详细的参数计算和MATLAB脚本实现,模拟了电动车在制动时的能量回收过程。重点研究了泄放电阻的控制策略,提出基于母线电压和电池SOC的多目标优化算法,确保系统在保护硬件安全的同时最大化能量回收效率。仿真模型包含完整的数学推导和模块搭建指南,为电动车能量管理系统设计提供了有效的仿真验证平台。

huanghm88的专栏 193

openjudge7624 山区建小学

区间类动态规划

YHaX的博客 1042

老版QQ原生表情gif动态

这是老版的QQ表情,不过全是动态的的,Windows照片查看器是不会动的,可以右击用浏览器打开查看,再说一遍是老版的,只是分享给宁愿用老版也要动态的人。

LinePhone3.2.7(android端最新版本) sip客户端

SIP客户端For android:LinePhone3.2.7(最新版本),官网地址:http://www.linphone.org/

【OpenJudge7624】【区间DP】山区建小学

山区建小学 总时间限制:1000ms内存限制:65536kB 【描述】 政府在某山区修建了一条道路,恰好穿越总共m个村庄的每个村庄一次,没有回路或交叉,任意两个村庄只能通过这条路来往。已知任意两个相邻的村庄之间的距离为di(为正整数),其中,0 < i < m。为了提高山区的文化素质,政府又决定从m个村中选择n个村建小学(设 0 < n < = m &...

XIAO01067922的博客 210

win10 跳过U8环境检测的IE WebControls.rar

win10 安装u8的时候 提示IE WebControls 不通过,这个工具可以欺骗u8的检查。 跳过U8环境检测的IE WebControls。提示导入失败后,重新检测通过。

Openjudge 7624 山区建小学

描述政府在某山区修建了一条道路,恰好穿越总共m个村庄的每个村庄一次,没有回路或交叉,任意两个村庄只能通过这条路来往。已知任意两个相邻的村庄之间的距离为di(为正整数),其中,0 < i < m。为了提高山区的文化素质,政府又决定从m个村中选择n个村建小学(设 0 < n < = m < 500 )。请根据给定的m、n以及所有相邻村庄的距离,选择在哪些村庄建小学,才使得所有村到最近小学的距离总和最小,

Mercury的博客 573

OV9734 DATASHEET,完整规格书

OV9734完整规格书,包括电气参数,尺寸规格,寄存器配置表等

openjudge每日推荐——7624山区建小学

描述 政府在某山区修建了一条道路,恰好穿越总共m个村庄的每个村庄一次,没有回路或交叉,任意两个村庄只能通过这条路来往。已知任意两个相邻的村庄之间的距离为di(为正整数),其中,0 < i < m。为了提高山区的文化素质,政府又决定从m个村中选择n个村建小学(设 0 < n < = m < 500 )。请根据给定的m、n以及所有相邻村庄的距离,选择在哪些村庄建小学,才使得所有村到最近小学的距离总

Loi_whales 的坑 1173

【OpenJudge - noi - 7624】山区建小学(dp)

题干: 总时间限制: 1000ms 内存限制: 65536kB 描述 政府在某山区修建了一条道路,恰好穿越总共m个村庄的每个村庄一次,没有回路或交叉,任意两个村庄只能通过这条路来往。已知任意两个相邻的村庄之间的距离为di(为正整数),其中,0 &lt; i &lt; m。为了提高山区的文化素质,政府又决定从m个村中选择n个村建小学(设 0 &lt; n &lt; = m &l...

xuanweiace的博客 568

OpenJudge noi 7624山区建小学

Description 政府在某山区修建了一条道路,恰好穿越总共m个村庄的每个村庄一次,没有回路或交叉,任意两个村庄只能通过这条路来往。已知任意两个相邻的村庄之间的距离为di(为正整数),其中,0 < i < m。为了提高山区的文化素质,政府又决定从m个村中选择n个村建小学(设 0 < n < = m < 500 )。请根据给定的m、n以及所有相邻村庄的距离,选择在哪些村庄建小学,才使得

loi_black蒟蒻的博客 708

OPENJUDGE NOI 7624 山区建小学

小水题

Orion_Rigel 2192

Openjudge — 7624 山区建小学

问题描述 政府在某山区修建了一条道路,恰好穿越总共m个村庄的每个村庄一次,没有回路或交叉,任意两个村庄只能通过这条路来往。已知任意两个相邻的村庄之间的距离为di(为正整数),其中,0 < i < m。为了提高山区的文化素质,政府又决定从m个村中选择n个村建小学(设 0 < n < = m < 500 )。请根据给定的m、n以及所有相邻村庄的距离,选择在哪些村庄建小学,...

weixin_30407099的博客 185
上一篇: UVa 1328 Period
下一篇: Openjudge 8782 乘积最大
SilverNebula
博客等级 码龄11年 11粉丝 52原创
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值