题目描述

一些村庄被建在一条笔直的高边公路边上。我们用一条坐标轴来描述这条高边公路,每一个村庄的坐标都是整数。没有两个村庄坐标相同。两个村庄问的距离,定义为它们坐标值差的绝对值。
我们需要在一些村庄建立邮局一一当然,并不是每一个村庄都必须建立邮局。邮局 必须被建在村庄里,因此它的坐标和它所在的村庄坐标相同。每个村庄使用离它最近的 那个邮局,建立这些邮局的原则是:所有村庄到各自所使用的邮局的距离总和最小。你的任务是编写一个程序,在给定了每个村庄的坐标和将要建立的邮局数之后,按照上述原则,合理地选择这些邮局的位置。

输入

第一行包含两个整数:第一个整数是村庄的数目 V,1≤V≤300;第二个整数是将建立的邮局数 P,1≤P≤30 且 P≤V。
第二行按照递增顺序列出了 V 个整数。这 V 个整数分别表示了各村庄的位 置坐标。对于每一个位置坐标 X,1≤X≤10000。

输出

第一行是一个整S,表示你所求出的所有村庄到离它最近邮局的距离的总和。

样例输入

10 5 1 2 3 6 7 9 11 22 44 50

样例输出

9

提示

在2 7 22 44 50建立邮局
 
题解:
先处理出dis[i][j]数组,表示i到j中建一个邮局需要的总路程,很明显一个区间中选中间位置会使总路程最小.
然后就是简单DP:F[i][k]表示前i个村庄建k个邮局最小的总路程.
F[i][k]=min(F[j][k-1]+dis[j+1][i],F[i][k]); k是枚举的邮局数量.
 #include<iostream>
#include<cstdio>
#include<algorithm>
#include<cstring>
#include<cmath>
using namespace std;
const int N=,M=,INF=;
int gi(){
int str=;char ch=getchar();
while(ch>'' || ch<'')ch=getchar();
while(ch>='' && ch<='')str=str*+ch-'',ch=getchar();
return str;
}
int x[N],dis[N][N],F[N][M];
int main()
{
int n=gi(),p=gi(),mid;
for(int i=;i<=n;i++)x[i]=gi();
for(int i=;i<=n;i++)
{
for(int j=i+;j<=n;j++)
{
mid=(i+j)>>;
for(int k=i;k<=j;k++)
dis[i][j]+=abs(x[mid]-x[k]);
}
}
memset(F,/,sizeof(F));
for(int i=;i<=n;i++)F[i][]=dis[][i];
for(int k=;k<=p;k++)
{
F[k][k]=;
for(int i=k+;i<=n;i++)
{
for(int j=k-;j<i;j++)
{
F[i][k]=min(F[j][k-]+dis[j+][i],F[i][k]);
}
}
}
printf("%d",F[n][p]);
return ;
}

【LSGDOJ 1408】邮局的更多相关文章

  1. TCP/IP协议详解——邮差与邮局

    信号的传输总要符合一定的协议.比如说长城上放狼烟,是因为人们已经预先设定好狼烟这个物理信号代表了“敌人入侵”这一抽象信号.这样一个“狼烟=敌人入侵”就是一个简单的协议. 信号的传输总要符合一定的协议( ...

  2. BZOJ 1408: [Noi2002]Robot

    1408: [Noi2002]Robot Time Limit: 5 Sec  Memory Limit: 64 MBSubmit: 510  Solved: 344[Submit][Status][ ...

  3. 【IOI2000】邮局设置问题

    现在连基础DP都要看题解和代码才能写出来了,怎么办嘛QAQ 原题: 一些村庄建在一条笔直的高速公路边上,我们用一条坐标轴来描述这条公路,每个村庄的坐标都是整数,没有两个村庄的坐标相同.两个村庄的距离定 ...

  4. poj邮局1160

    题目是给出V个村庄,取出P个做为邮局,要求每个村庄到邮局的距离和最小. 先考虑只有一个邮局的情况,不管你怎么放邮局和最小的情况总是在中点的位置. 再来考虑P>1的情况: 假设P-1个邮局已经选好 ...

  5. bzoj 1408 [Noi2002]Robot(欧拉函数)

    [题目链接]  http://www.lydsy.com/JudgeOnline/problem.php?id=1408 [题意] 求m的所有约数中,满足可以分解成(奇数个不同素数/偶数个不同素数/其 ...

  6. 九度OJ 1408 吃豆机器人 -- 动态规划

    题目地址:http://ac.jobdu.com/problem.php?pid=1408 题目描述: 淘宝公司内部有许多新鲜的小玩具,例如淘宝智能机器人.小时候,大家都玩过那个吃豆子的游戏吧,这机器 ...

  7. hdu 1284 关于钱币兑换的一系列问题 九度oj 题目1408:吃豆机器人

    钱币兑换问题 Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others) Total Sub ...

  8. shu_1241 邮局位置问题

    http://202.121.199.212/JudgeOnline/problem.php?cid=1078&pid=5 分析: 由于题目中的距离是折线距离,所以能够分别考虑两个方向.又x方 ...

  9. 邮局 100分代码(dfs+多重剪枝)

    蓝桥杯真题-邮局 #include<iostream> #include<algorithm> #include<set> #include<string&g ...

随机推荐

  1. 201621123040《Java程序设计》第十四周学习总结

    1.本周学习总结 1.1以你喜欢的方式(思维导图或其他)归纳总结与数据库相关内容. 显示所有数据库: show databases; 创建数据库: create database test; 删除数据 ...

  2. 20162330 第10周 MySort实验

    关于MySort的进一步实践 课堂作业题目如下: 模拟实现Linux下Sort -t : -k 2的功能.参考Sort的实现.提交码云链接和代码运行截图. import java.util.*; pu ...

  3. Alpha冲刺第十二天

    Alpha冲刺第十二天 站立式会议 项目进展 项目核心功能,如学生基本信息管理模块,学生信用信息模块,奖惩事务管理模块等等都已完成,测试工作大体结束. 问题困难 项目结束后对项目的阶段性总结缺乏一定的 ...

  4. Python基于共现提取《釜山行》人物关系

    Python基于共现提取<釜山行>人物关系 一.课程介绍 1. 内容简介 <釜山行>是一部丧尸灾难片,其人物少.关系简单,非常适合我们学习文本处理.这个项目将介绍共现在关系中的 ...

  5. docopt——好用的Python命令行参数解释器

    Qingchat使用的命令行参数解释器是 docopt,用下来感觉非常棒,所以决定介绍一下这个库.( 奉劝各位看官,真爱生命,远离argparse. ) 介绍 docopt 本质上是在 Python ...

  6. 记一次jar包冲突

    题记:永远不要在同一个项目中,引用不同版本的两个jar包,否则,这可能就是一个大坑. 在做网校项目的时候,帮助中心要使用lucene,所以就引入了lucene-5.5.1的包,删掉了原先存在于项目中的 ...

  7. 获取选中的radio的value值

    html:<div id="bb"> <input  name="cc" type="radio" value=" ...

  8. SpringBoot入门:新一代Java模板引擎Thymeleaf(实践)

    菜鸟教程:http://www.runoob.com/ http://apps.bdimg.com/libs/angular.js/1.4.6/angular.min.js http://apps.b ...

  9. Docker的容器操作

    启动一次性运行的容器 入门级例子:从ubuntu:14.04镜像启动一个容器,成功后在容器内部执行/bin/echo 'hello world'命令,如果当前物理机没有该镜像,则执行docker pu ...

  10. GIT入门笔记(20)- git 开发提交代码过程梳理

    git开发提交流程新项目开发,可以直接往master上提交老项目维护,可以在分支上修改提交,多次add和commit之后,也可以用pull合并主干和本地master,解决冲突后再push 1.检出代码 ...