1197 山区建小学

读题20分钟,想题10分钟,看代码20分钟,理解代码20分钟,写代码10分钟,调代码40分钟…(逃
个人感觉是练的递推里面比较复杂的,应该是一道绿题吧,光递推式就很难找
设状态a表示两地距离,c表示两地到学校最近距离,f表示从i个村庄建立j个学校的最短距离
首先我们要根据两两之间的距离来构造各个点的距离
然后通过中间点距离最短计算两个点到学习的最近距离和,也即是c数组
然后就是求f数组,用一个n3循环枚举f数组,递推式

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

他的思路就是枚举一个k,将ij区间分成两个部分,以k为中点;f[k][j-1]前面表示k个村建立j-1个学校最小和,c[k+1][i]表示第k个村庄到第i个村庄的最小距离
至于为什么是j-1而不是j,这个想了很长时间,因为当前的j是由前面的状态来决定的

#include<iostream>
#include<cstdio>
#include<algorithm>
using namespace std;
int a[505][505],c[505][505];//a表示两地距离
//c表示两地到学校最近距离
int f[505][505];//f表示从i个村庄建立j个学校的最短距离
int main()
{int n,m;//n个村庄 选m个村建学校 cin>>n>>m;for(int i=1;i<n;i++){cin>>a[i][i+1];}for(int i=1;i<=n;i++){for(int j=i+1;j<=n;j++){a[i][j]=a[j-1][j]+a[i][j-1];//统计全部路径 //从j-1分开 a[j][i]=a[i][j];//双向性}}int mid;for(int i=1;i<=n;i++){for(int j=i+1;j<=n;j++)//枚举两个地区 {mid=(i+j)/2;//两个地区中间距离最短,在中间建学校 c[i][j]=0;for(int k=i;k<=j;k++)c[i][j]+=a[k][mid];//距离和 }}for(int i=1;i<=n;i++){f[i][1]=c[1][i];}int s=0x7ffffff;for(int i=1;i<=n;i++)//枚举村庄 {for(int j=2;j<=m;j++)//枚举学校 {f[i][j]=s;for(int k=j-1;k<=i;k++)//枚举距离 {f[i][j]=min(f[i][j],f[k][j-1]+c[k+1][i]); //分成两段,以k为中点,前面表示k个村建立j-1个学校最小和//后面第k个村庄到第i个村庄的最小距离 } }}cout<<f[n][m]<<endl;return 0;
}
/*
10 2
3 1 3 1 1 1 1 1 3
*/

1197 山区建小学相关推荐

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

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

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

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

  3. 【Open Judge】7624 山区建小学

    ** 7624:山区建小学 ** ** 描述 ** 政府在某山区修建了一条道路,恰好穿越总共m个村庄的每个村庄一次,没有回路或交叉,任意两个村庄只能通过这条路来往.已知任意两个相邻的村庄之间的距离为d ...

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

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

  5. 1197:山区建小学

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

  6. 7624:山区建小学

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

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

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

  8. 山区建小学(信息学奥赛一本通-T1197)

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

  9. openjudge7624:山区建小学

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

最新文章

  1. Matlab实现图像白平衡(灰度世界法、全反射算法)
  2. 【Java】找到链表中倒数第k个结点
  3. delphi中覆盖最大化消息
  4. 有一个1,2,3....49 的数组,通过控制台显示为7行7列的,并且里面的数据时随机的代码...
  5. python二分法排序_python实现快速排序的示例(二分法思想)
  6. 电脑录屏工具_一分钟教你学会两种电脑录屏的方法,以后别再说不知道了
  7. linux 外壳的概念,LINUX当中必须知道的概念和小技巧
  8. 混迹职场,有交换意识的人都是聪明人
  9. 键盘各键对应的ASCII码值(包括鼠标和键盘所有的键)
  10. java简历vue专业技能_用vue 写一个好看的个人简历
  11. TortoiseGit - 详细提交流程
  12. Vue 3.0 Ref-sugar 提案到底是啥,真的是自寻死路吗?
  13. GCC Manual
  14. win10用户和计算机,对于电脑工作者们,更喜欢用win7还是win10呢?
  15. 计算机页面偏黄怎么修改,电脑显示器偏黄怎么调
  16. matlab中绘制图像
  17. LeetCode 286 Walls and Gates
  18. 微软沈向洋自述:我职业生涯里的七堂课
  19. 模型5.4——对数据进行正态分布检验
  20. 2022年最新大数据学习路线图

热门文章

  1. HTML标签的属性和特性
  2. JS实现PDF文件下载
  3. Ti437x LED裸机程序全解
  4. 西雅图本地创业公司大盘点
  5. Correct the classpath of your application so that it contains a single, compatible version of 包名
  6. Web——HTML常见标签及用法
  7. 心理压力的测试软件,心理压力测量量表(WYB)
  8. MySQL主从复制以及会出现的幺蛾子问题、解决方法
  9. 一件代发怎么赚钱?无货源模式
  10. zabbix纯内网环境监控服务器发送邮件报警