1197:山区建小学

【题目描述】
政府在某山区修建了一条道路,恰好穿越总共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

#include<iostream>
#include<cstdio>
#include<set>
#include<stack>
#include<cstring>
#include<string>
#include<cmath>
#include<iomanip>
#include<vector>
#include<map>
#include<algorithm>
#include<queue>
typedef unsigned long long ull;
typedef  long long ll;
using namespace std;
const int inf=99999999;
const int maxn=510;
int f[maxn][maxn],s[maxn][maxn],dis[maxn][maxn];
int q[maxn];
int bst(int i,int j){int mid=(i+j)/2;int x=0;for(int p=i;p<=j;p++){x+=dis[p][mid];}return x;
}
int main(){int n,m;cin>>n>>m;for(int i=2;i<=n;i++){int x;cin>>x;q[i]=q[i-1]+x;}for(int i=1;i<=n;i++){for(int j=1;j<=n;j++){if(i==j)dis[i][j]=0;elsedis[i][j]=dis[j][i]=abs(q[j]-q[i]);}}for(int i=1;i<=n;i++){for(int j=1;j<=n;j++){s[i][j]=bst(i,j);f[i][j]=inf;}}for(int i=1;i<=n;i++){f[i][i]=0;f[i][1]=s[1][i];}for(int i=2;i<=n;i++){for(int j=2;j<=min(i,m);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]);}}}cout<<f[n][m]<<endl;return 0;
}

信息学奥赛一本通 1197 山区建小学(区间DP)相关推荐

  1. 1197 山区建小学

    1197 山区建小学 读题20分钟,想题10分钟,看代码20分钟,理解代码20分钟,写代码10分钟,调代码40分钟-(逃 个人感觉是练的递推里面比较复杂的,应该是一道绿题吧,光递推式就很难找 设状态a ...

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

    题干: 总时间限制: 1000ms 内存限制: 65536kB 描述 政府在某山区修建了一条道路,恰好穿越总共m个村庄的每个村庄一次,没有回路或交叉,任意两个村庄只能通过这条路来往.已知任意两个相邻的 ...

  3. 信息学奥赛一本通(基础算法与数据结构-题解汇总目录)

    信息学奥赛一本通(C++版)在线评测系统 基础(二)基础算法   更新中...... 第一章高精度计算 1307[例1.3]高精度乘法 1308[例1.5]高精除 1309[例1.6]回文数(Noip ...

  4. 信息学奥赛一本通超详细题解,动画图文题解

    内容来源于微信公众号:大神编程.已经过原文作者授权. 更新时间:2020-11-5 现在开始更新基础算法题. 个人感言:从未见过如此详细的题解,动画.图文结合,适合任何水平的选手.尤其是特别适合自学的 ...

  5. 信息学奥赛一本通(1197:山区建小学)

    1197:山区建小学 时间限制: 1000 ms         内存限制: 65536 KB 提交数: 3900     通过数: 2713 [题目描述] 政府在某山区修建了一条道路,恰好穿越总共m ...

  6. 信息学奥赛一本通在线提交地址

    信息学奥赛一本通 1 C++语言入门 1.1 综合 1.1.1 P1458 地球人口承载力估计 正确: 770 提交: 1794 比率: 42.92 % 1.1.2 P1686 Hello, Worl ...

  7. 动态规划——openjudge7624山区建小学

    题目: 描述 政府在某山区修建了一条道路,恰好穿越总共m个村庄的每个村庄一次,没有回路或交叉,任意两个村庄只能通过这条路来往.已知任意两个相邻的村庄之间的距离为di(为正整数),其中,0 < i ...

  8. 信息学奥赛一本通 (C++)上机练习

    信息学奥赛一本通(C++)上机练习 此书为娃儿的第一本刷题书.娃儿现在四年级 ,希望他能坚持下来.特开贴加油 luogu: disangan223 第一部分 C++语言 第一章 C++语言入门 T10 ...

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

    今天小编随意写了一道老师布置的题,这是一道看起来很普通的题,我却不明白它为什么放在递推中-- 废话不多说,直接看题. ▍1197:山区建小学 [题目描述] 政府在某山区修建了一条道路,恰好穿越总共m个 ...

  10. 信息学奥赛一本通_长乐一中老师演绎“奥赛传奇”

    董永建(右一)在课堂上. 台海网5月14日讯 据福州晚报报道,长乐一中有一位"传奇"老师--15年来,他辅导的学生在全国高中生信息学奥赛中获金牌3人次.银牌3人次.铜牌5人次:在全 ...

最新文章

  1. [原创]微软拼音输入法2007(含64位版)
  2. C++的decltype()的介绍
  3. 简单实用的js调试logger组件
  4. 基于Enterprise Library的Winform开发框架实现支持国产达梦数据库的扩展操作
  5. C#基础|面向对象之多态
  6. C# StreamReader.ReadLine统计行数的问题
  7. [postgresql]postgresql的VACUUM 介绍
  8. 2019.04.10 电商28 支付宝功能02
  9. Android 开发性能优化
  10. 超级外链工具:一款超级外链SEO工具源码
  11. 如果你的开发板上STM32采用外部晶振,那么就不能选择BYPASS Clock Source (旁路时钟源)模式,否则STM32将会工作不正常。
  12. 腾讯云播放器隐藏音频播放的按钮
  13. 美国华盛顿州立大学计算机排名,2019上海软科世界一流学科排名计算机科学与工程专业排名华盛顿州立大学排名第301-400...
  14. 富文本TinyMCE
  15. 第39级台阶 蓝桥杯
  16. CSS 样式书写顺序及规范
  17. 前端裁图-如何使用ps软件将矩形图片裁剪成圆角矩形
  18. 微信公众号的简单开发
  19. 01赵玉荣-03安海莹-04郝玥-实训一
  20. 作业Android自我介绍

热门文章

  1. Windows下GetLastError()返回值介绍
  2. ubuntu18.04 使用scrcpy将安卓手机投屏到电脑
  3. 人在烟火间(外两章)
  4. 迷你双核RK3066 安卓4.1智能网络高清TV 安卓播放器MK802III-淘宝网
  5. python多继承mro_Python的多继承问题-MRO和C3算法
  6. SUBMAIL315专题—云通信平台如何保护用户数据安全?
  7. 如何购买阿里云服务器?阿里云服务器购买指南
  8. BZOJ2339[HNOI2011]卡农——递推+组合数
  9. 计算机英特尔显卡在哪找,Win10英特尔显卡设置图标不见了该怎么办?
  10. elementui中表格的表头设置背景颜色