Post Office(一道老经典的题了)

题目大意:

在一条笔直的公路上有n个村庄,每个村庄都有自己的坐标,现在要在这条公路上建m个邮局,让所有村庄到最近的邮局的距离最短

已知:1≤n≤300,1≤m≤30

首先,这是1995年的题,放到现在来,暴搜都可以过(但我好像不知道怎么打暴搜)

其次,可以用记忆化搜索,基本是正解(好像有点思路)

正解当然是dp了(我竟然制作出了这个)

所以,这里我们就来讲解一下正解的dp

这个dp有点难想

dp [ i ] [ j ] 表示从i个村庄中选取j个作为邮局的路径综合的最小值

p [ i ] [ j ] 表示从第i个村庄到第j个村庄只建一个邮局的路径的最小值

首先,我们可以很轻松的得到p,

在从i到j的村庄中选择就应该选择 ( i + j ) / 2 个村庄

然后就可以得到:

dp [ i ] [ j ] = min ( dp [ i ] [ j ] , dp [ k ] [ j - 1 ] + p [ k + 1 ] [ j ])

由此得出代码::

#include<cstdio>
#include<iostream>
using namespace std;
inline void read(int &x) {x=0;char s=getchar();while(s<'0'||s>'9')s=getchar();while(s>='0'&&s<='9') {x=x*10+s-48;s=getchar();}
}
inline void pr(int x) {if(x>9)pr(x/10);putchar(x%10+48);
}//快读快输不解释
int a[305],dp[305][305],p[305][305],i,n,j,k,m;
int main() {read(n),read(m);for(i=1;i<=n;i++) {read(a[i]);for(j=1;j<=m;j++)dp[i][j]=2147483647;//清为极大值,2147483647=INT_MAX}for(i=1;i<=n;i++) {for(j=i+1;j<=n;j++)p[i][j]=p[i][j-1]+a[j]-a[(i+j)/2];//预处理pdp[i][1]=p[1][i];//边界条件}for(i=2;i<=n;i++)for(j=2;j<=m;j++)for(k=j-1;k<i;k++)dp[i][j]=min(dp[i][j],dp[k][j-1]+p[k+1][i]);//状态转移方程pr(dp[n][m]);
}

星星之火OIer:Post Office题解相关推荐

  1. 星星之火OIer:篱笆题解

    篱笆题目出处(3075) 这道题是我们编程社考试中第三次的第二题,当时都有一些思路,但是时间紧,没打出来 读了题之后,第一思路是暴力,然后是最小生成树,最后是才想到贪心 首先,暴搜肯定会超时 然后,用 ...

  2. 星星之火OIer:星星题解

    (星星)又是一道洛古上没有的题(3763) 题目大意 天文学家经常研究星形图,其中恒星由平面上的点表示,每颗恒星都有笛卡尔坐标.让恒星的水平为不高于恒星的数量,而不是给定恒星的右侧.天文学家想知道恒星 ...

  3. 星星之火OIer:手机网络

    题目传送门 其实这道题跟我的上一篇的三道题都挺像的 尤其是树的最大独立集 但这道题还是有本质上的差别 那三道题都是要尽量多 而这道题要尽量少 所以区别还是很大的 而且这道题的dp的定义以及状态转移方程 ...

  4. 星星之火OIer:对拍

    此处来淡谈对拍 对拍,我的理解就是用一个暴搜程序和一个随机生成数据的程序来和也许是正解的程序来对比一下,帮忙查错 然后呢,比较朴素的算法就是打一个随机函数然后copy 以下是随机生成数据代码: #in ...

  5. UVa340 Master-Mind Hints 猜数字游戏的提示 题解

    UVa340 Master-Mind Hints 猜数字游戏的提示 题目链接:UVa340 题目描述 输入格式 输出格式 题目翻译 你的任务是实现一个经典的"猜数字"游戏.给定答案 ...

  6. 提高篇 第五部分 动态规划 第2章 树型动态规划

    例1 二叉苹果树 信息学奥赛一本通(C++版)在线评测系统 二叉苹果树_哔哩哔哩_bilibili 洛谷P2015 二叉苹果树 题目讲解 洛谷P2015 二叉苹果树 题目讲解_哔哩哔哩_bilibil ...

  7. 提高篇 第五部分 动态规划 第6章 斜率优化动态规划

    例1 任务安排(TYVJ1098) [tyvj1098]任务安排(dp)_薇小薇-CSDN博客 Tyvj1098 任务安排_Monster__Yi的博客-CSDN博客 P2365 任务安排 任务安排 ...

  8. 【牛客】新建 Microsoft Office Word 文档题解

    原题链接 题目描述 CSL正在学习<计算机办公自动化>文件的建立与删除. CSL发现,当他新建一个word文档时,会得到一个名为"新建 Microsoft Office Word ...

  9. 30行代码AC_HDU-5933 ArcSoft‘s Office Rearrangement(模拟+题解报告)

    励志用更少的代码做更高效的表达 ArcSoft, Inc. is a leading global professional computer photography and computer vis ...

最新文章

  1. 【青少年编程竞赛交流】11月份微信图文索引
  2. vue学习笔记(二)- 数据绑定、列表渲染、条件判断
  3. c语言case的值能动态修改吗,java中的switch case语句中,case所对应的数目是不确定的,能否动态改变case...
  4. linux命令:iptables、modprobe装载模块、网络防火墙服务
  5. mysql005约束.列级别
  6. 时间序列预测 预测时间段_应用时间序列预测:美国住宅
  7. devops的重要性_为什么反馈而不是指标对DevOps至关重要
  8. linux下keytool生成证书_生成证书命令keytool
  9. Android 学习心得体会
  10. webpack全局安装和安装过程中碰见的一些坑(npm error)解决方案
  11. Rust : 简单模拟交易所与参与机构
  12. Visio使用注意事项
  13. 新手安卓开发详细教程
  14. QFD质量机能展开,了解一下呀!
  15. 梦幻西游ps计算机,五开选择PS与NE:那是因为效率高的缘故
  16. 在线生成条形码(39码、EAN-13)
  17. 什么是实人认证?需要用到哪些api接口
  18. 聊聊消息中心的设计与实现逻辑
  19. HACK彩虹易支付超完整源码+内附11个模板
  20. 拉勾就业急训营java学习笔记说明

热门文章

  1. 【Vim】学习笔记day02 Vim的三级窗体切换
  2. UI设计干货可临摹素材|打造精美的UI界面!
  3. 10 款国外实用、有趣的 GitHub 简介 README
  4. BGP的IBGP邻居和路由详解,理论+实战,一分钟掌握
  5. VC Spyglass CDC(二)常见的CDC处理方法
  6. 《示波器仪器》的使用
  7. [转]order by 1是什么意思?
  8. 第二章:25+ Python 数据操作教程(第六节最佳熊猫教程 | 通过 50 个示例学习
  9. R语言ggplot2画一幅漂亮的哑铃图
  10. linux安装php-java-bridge