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]);
	
}


基于单片机直流电机调速控制系统设计 *单片机设计介绍,基于单片机直流电机调速控制系统设计。 阅读详情

相关推荐

【OpenCV3】cv::compare()使用详解

cv::compare()主要用于两个图像之间进行逐像素的比较,并输出比较的结果。具体用法如下: cv::compare() bool cv::compare( cv::InputArray src1, // 输入数组1 cv::InputArray src2, // 输入数组2 cv::OutputArray dst, // 输出数组 int cmpop // 比较操作子,见下表 ...

guduruyu的专栏 9761

信息学奥赛一本通 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

从踩坑到填平:我在RHEL7上给Tesla A100装驱动的完整记录(含Fabric Manager配置)

本文详细记录了在RHEL7系统上为Tesla A100安装Nvidia驱动的完整过程,包括Fabric Manager配置的关键步骤。通过分析A100架构的特殊性,提供了从驱动安装到服务配置的详细指南,并分享了常见问题的排查方法和性能调优技巧,帮助用户高效部署高性能GPU计算环境。

weixin_29291863的博客 283

信息学奥赛一本通 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

速腾Helios-16P使用Lego-loam实时构建点云地图(二)——Lego-loam的编译与运行

不兼容的问题,打开lego-loam的~/lego-loam_ws/src/LeGO-LOAM/LeGO-LOAM/src下的4个源码文件,搜索/camera_init,将所有/camera_init改成camera_init,也就是去掉斜杠,这样再回到工作空间重新编译lego-loam。3、速腾16线激光雷达RS-16 ----- 3D建图算法LeGO-LOAM的使用(Ubuntu18.04 + ROS Melodic)_速腾16线 lego loam_杰尼君的博客-优快云博客。

qq_59475883的博客 2568

《生化危机9:安魂曲》D加密免BIOS破解方案详解

数字版权管理(DRM)技术通过加密手段保护软件版权,Denuvo(D加密)作为主流方案常应用于3A游戏。其原理是通过实时验证机制阻止未授权访问,但可能影响性能表现。本文以《生化危机9》为例,解析一种免BIOS修改的D加密绕过方案,该方案通过授权启动器模拟正版验证流程,保持系统零侵入性。实测表明,该方法在GTX 1060至RTX 3070等多硬件平台均能稳定运行,支持MOD扩展且兼容Reshade画质增强,为玩家提供开箱即用的绿色版体验。

weixin_33898233的博客 925

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

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

weixin_30947043的博客 1172

立创·庐山派-K230-CanMV(嘉楠勘智)开发板通过ATK-ESP8266实现图像识别数据无线传输至原子云

本文详细介绍了如何使用立创·庐山派-K230-CanMV开发板,通过ATK-ESP8266 WIFI模块实现图像识别数据的无线传输至原子云平台。内容包括硬件连接、软件环境搭建、AT指令控制、原子云连接及数据上传的全过程,并提供了实用的调试技巧和常见问题解决方案,为物联网应用开发提供了完整实践指南。

potato的博客 743

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

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

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

用KalmanNet搞定非线性状态估计:当卡尔曼滤波遇上神经网络

本文深入探讨了KalmanNet如何将神经网络与卡尔曼滤波结合,以解决非线性状态估计中的模型失配和噪声不确定性问题。通过保留经典滤波框架并用RNN学习卡尔曼增益,该方法在无人机导航、机器人定位等场景中实现了模型驱动与数据驱动的优势互补,提升了估计的鲁棒性和灵活性。

mango的博客 310

手把手教你学Simulink--基于Simulink的微电网用DC-DC变换器仿真建模

微电网概述微电网:包括可再生能源发电设备、储能系统和负载,可以独立于大电网运行,也可以并网运行。重要性提高能源可靠性:通过本地化供电减少对外部电网的依赖。促进可再生能源利用:支持高效整合多种可再生能源。挑战多源管理:不同类型的能源产生方式各异,需设计灵活的电源管理系统。能量转换效率:需要高效的能量转换装置来确保能源的有效利用。通过上述步骤,我们简要介绍了如何基于Simulink进行微电网中DC-DC变换器的仿真建模。

MHD0815的博客 161

信息学奥赛一本通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

EtherCAT主站IGH-- 49 -- 搭建xenomai系统及自己的IGH主站

以上就是搭建xenomai系统及自己的IGH主站的内容。有不明白的地方欢迎留言;有建议欢迎留言,我后面编写文档好改进。创作不容,如果文档对您有帮助,记得给个赞。

常驻客栈的博客--嵌入式EtherCAT 3158

openjudge7624 山区建小学

区间类动态规划

YHaX的博客 1042

efm32 入门.pdf

本PDF共计22页,介绍的是操作驱动API,下载与否自己斟酌。

迈瑞BS系列全自动生化分析仪LIS协议接口手册(内含HL7和ASTM)

迈瑞BS系列全自动生化分析仪LIS协议接口手册,内含HL7和ASTM)

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

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

XIAO01067922的博客 210

VB摄像头监控

该VB模块可对摄像头捕获的画面进行录像等,可在创建的窗口进行控制

Openjudge 7624 山区建小学

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

Mercury的博客 573

老版QQ原生表情gif动态

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

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、付费专栏及课程。

余额充值