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


【网络与爬虫 62】小程序爬虫终极攻略:微信支付宝小程序数据采集完全指南 本文深入解析微信和支付宝小程序的爬虫技术,从基础架构分析到高级逆向工程,涵盖WXML/AXML模板解析、API接口拦截、网络流量分析等核心技术。通过实战案例和代码示例,帮助开发者掌握小程序数据采集的完整技术栈。 阅读详情

相关推荐

支付漏洞防护绕过的一种方式

放完包后就到了提交订单的地方,可以发现,金额确实小了很多,合理的搭配的话还可以更低,再次前进可以发现,金额确实是这么多,后面就不支付了,到此就结束了。也就是说数量可以为负数,但是金额不能为0或者0以下,有什么方法可以绕过这个限制吗,其实并不难,既然可以为负数,只是对金额不能为0或者负数做了限制。我们可以尝试拼接法,利用负数加上正数让他的值变得很低,但是又大于0就可以了,这里利用购物车的结算方法,随机加一些在购物车里。这里为了方便查看数据包,我这边商品的数量选择3,点击立即购买并抓包。

2301_80115097的博客 1529

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

【Unity Animation 2D】从零到一:骨骼绑定与IK动画实战指南

本文详细介绍了Unity中2D骨骼绑定与IK动画的实战流程,从角色素材准备、骨骼系统创建到权重绘制和IK设置,逐步指导开发者掌握2D动画制作技巧。通过反向动力学(IK)技术,实现更自然的角色动画效果,适用于游戏开发和动画制作。

weixin_30430677的博客 371

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

避坑指南:用pygrib处理ERA5气象数据时遇到的5个典型问题

本文总结了使用pygrib库处理ERA5气象GRIB数据时常见的五个典型问题及解决方案,涵盖数据获取、内存管理、时间处理、空间插值和性能优化。重点针对气象数据插值这一核心挑战,提供了处理不规则网格、缺失值和跨日期变更线的实用代码示例与优化策略,帮助用户高效、稳定地完成气象数据分析工作。

weixin_28224217的博客 185

Win10插网线显示未识别网络的三种解决方法

本文介绍了三种解决Win10插网线显示未识别网络问题的方法:更新或重启网络设备驱动程序、重置Winsock目录、启用Network Setup Service服务。这些方法都是基于常见的网络问题和解决方案而设计的,适用于大多数Win10用户。如果你遇到了这一问题,可以按照上述步骤进行操作,相信一定能够找到解决问题的方法。需要注意的是,在进行任何操作之前,请务必备份重要数据以防万一。此外,如果你对计算机硬件或软件不熟悉,建议寻求专业人士的帮助以避免造成不必要的损失。

nntxthml的博客 6773

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

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

weixin_30947043的博客 1172

单视图几何Vanish Point(消失点/灭点)计算方法——Robert_T_Collins(罗伯特·柯林斯)算法

单视图几何Vanish Point(消失点/灭点)计算方法——Robert_T_Collins(罗伯特·柯林斯)算法

beyond951的博客 7333

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

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

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

STM32F103xx / STM32F429VET6最小系统原理图

心血来潮想试一下STM32F4系列和F1系列在编程上有什么差别,手头没有开发板,本着能勤俭节约的原则自己先做一块看看能不能成,看了一下STM32F429VET6的芯片在F429xx中最便宜,对照着数据手册绘制了原理图画了PCB,目前打板中,焊接完如果跑不通回来修改文章。这里我们可以看到,VDD是标准工作电压,VDDA是模拟工作电压,且VDDA必须与VDD等电位,VBAT是备份工作电压,一般接纽扣电池电源,如果存在VREF+引脚,则要求VDDA-VREF+ < 1.2V。截图下来比较糊,不知道为什么。

m0_51294753的博客 1万+

FPGA实战:AXI BRAM Controller写时序避坑指南(附Vivado配置步骤)

本文深入探讨了FPGA开发中AXI BRAM Controller的写时序实战要点与常见陷阱。文章聚焦于写地址与写数据通道的握手机制,详细解析了AWREADY、WVALID等关键信号的处理,并提供了Vivado中流水线深度、ECC等关键参数的配置步骤与优化建议,旨在帮助开发者有效规避时序问题,提升系统性能。

weixin_32306683的博客 170

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

25 - GRACE Mascon数据缺失月份数据插值

本篇基于文章的相关内容和文章公开的奇异谱分析(SSA)插值算法程序包,对grace Mascon数据种缺失的月份进行 插值 ,总结了使用程序包的相关过程,可以将该程序应用到其他数据处理插值计算中。

weixin_43339605的博客 1843

openjudge7624 山区建小学

区间类动态规划

YHaX的博客 1042

ET2012新版免狗免安装绿色软件

ET2012新版免狗免安祖昂绿色软件。,新界面,新视觉,

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

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

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

XIAO01067922的博客 210

锂电池充电器电路设计 里面有电路

锂电池充电器电路设计 里面有电路 3.7V升压到5V电路设计。

Openjudge 7624 山区建小学

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

Mercury的博客 573

文档:亲测可用解决vnc灰屏,黑屏,鼠标大黑叉情况

主要解决vnc-viewer灰屏,黑屏,鼠标大黑叉等现象,详细见文档。

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

余额充值