POJ 1160 DP
题目:
poj 1160
题意:
给你n个村庄和它的坐标,现在要在其中一些村庄建m个邮局,想要村庄到最近的邮局距离之和最近。
分析:
这道题。很经典的dp
dp[i][j]表示建第i个邮局,覆盖到第j个村庄的距离之和。
问题在于状态方程怎么写?
dp[i][j]=min(dp[i][j],dp[i-1][k]+dis[k+1][j]) 意思就是建了i个邮局管辖1-j个村庄,或者建i-1个邮局管辖1-k个,而后边的k+1到j个村庄在建第i个。
其中这个dis[i][j]需要预处理一下。这个dis[i][j]表示 邮局i-j之间只建一个邮局的最优距离。经事实证明,是中点位置。辣么,怎么证明哩?
可以用反证法,其中还有分成两种情况。
一. 有奇数个村庄。如果假设不在正中间,比如说往左偏一个见图
二.有偶数个村庄
那他没有严格意义上的中点,他中点的左边一个村庄和右边一个村庄是一样的
(题意&分析From mars_ch)
#include <iostream>
#include <cstring>
#include <cmath>
#include <algorithm>
using namespace std;
int a[1000],n,m,d[1000][1000],f[1000][1000];
int main()
{
scanf("%d%d",&m,&n);
for(int j=1;j<=m;j++)
scanf("%d",&a[j]);
memset(f,0x3f,sizeof(f));
for(int i=1;i<=m;i++)
for(int j=1;j<=m;j++)
for(int k=i;k<=j;k++)
d[i][j]+=abs(a[(i+j)/2]-a[k]);
for(int i=0;i<=n;i++) f[0][i]=0;
for(int i=1;i<=m;i++)
for(int j=1;j<=n;j++)
for(int k=1;k<=i;k++)
f[i][j]=min(f[i][j],(f[k-1][j-1]+d[k][i]));
printf("%d",f[m][n]);
return 0;
}
POJ 1160 DP的更多相关文章
- POJ 1160 Post Office(区间DP)
Description There is a straight highway with villages alongside the highway. The highway is represen ...
- POJ 1160 经典区间dp/四边形优化
链接http://poj.org/problem?id=1160 很好的一个题,涉及到了以前老师说过的一个题目,可惜没往那上面想. 题意,给出N个城镇的地址,他们在一条直线上,现在要选择P个城镇建立邮 ...
- POJ 1160 Post Office(DP+经典预处理)
题目链接:http://poj.org/problem?id=1160 题目大意:在v个村庄中建立p个邮局,求所有村庄到它最近的邮局的距离和,村庄在一条直线上,邮局建在村庄上. 解题思路:设dp[i] ...
- POJ 1160 Post Office (四边形不等式优化DP)
题意: 给出m个村庄及其距离,给出n个邮局,要求怎么建n个邮局使代价最小. 析:一般的状态方程很容易写出,dp[i][j] = min{dp[i-1][k] + w[k+1][j]},表示前 j 个村 ...
- poj 1160 Post Office (间隔DP)
Post Office Time Limit: 1000MS Memory Limit: 10000K Total Submissions: 15966 Accepted: 8671 Desc ...
- 【dp】 比较经典的dp poj 1160
转自http://blog.sina.com.cn/s/blog_5dd8fece0100rq7d.html [题目大意]:用数轴描述一条高速公路,有V个村庄,每一个村庄坐落在数轴的某个点上,需要选择 ...
- poj 1160 Post Office 【区间dp】
<题目链接> 转载于:>>> 题目大意: 一条高速公路,有N个村庄,每个村庄均有一个唯一的坐标,选择P个村庄建邮局,问怎么选择,才能使每个村庄到其最近邮局的距离和最小?最 ...
- POJ 1160:Post Office 邮局经典DP
Post Office Time Limit: 1000MS Memory Limit: 10000K Total Submissions: 17168 Accepted: 9270 Desc ...
- POJ.1160.Post Office(DP 四边形不等式)
题目链接 \(Description\) 一条直线上有n个村庄,位置各不相同.选择p个村庄建邮局,求每个村庄到最近邮局的距离之和的最小值. \(Solution\) 先考虑在\([l,r]\)建一个邮 ...
随机推荐
- 解决fixed在苹果手机抖动问题/头部底部固定布局
1.头部和底部固定,中间内容滚动,不涉及fixed 1)absolute与height:100% <!DOCTYPE html><html><head> <m ...
- CAD绘制一个半径标注(com接口VB语言)
主要用到函数说明: _DMxDrawX::DrawDimRadial 绘制一个半径标注.详细说明如下: 参数 说明 DOUBLE dCenterX 被标注的曲线的中点X值 DOUBLE dCenter ...
- Spring MVC 笔记 概述
学习笔记 模型:封装装程序数据 视图:渲染模型数据,一般来说就是输出HTML 控制:处理请求,构建模型并将其传递给视图进行渲染 以上三者均围绕DispatcherServlet设计,它处理所有的HTT ...
- Redis Expire TTL命令
Redis can be told that a key should only exist for a certain length of time. This is accomplished wi ...
- 【 Codeforces Global Round 1 B】Tape
[链接] 我是链接,点我呀:) [题意] x轴上有m个连续的点,从1标号到m. 其中有n个点是特殊点. 让你用k段区间将这n个点覆盖. 要求区间的总长度最小. [题解] 一开始假设我们需要n个胶带(即 ...
- poj 2831 次小生成树模板
/*次小生成树 题意:给你一些路径,现在将一部分路径权值减少后问是否可以替代最小生成树里面的边. 解:次小生成树,即将这条边连上,构成一个环 求出任意两点路径之间的除了这条边的最大值,比较这个最大值& ...
- Fibonacci数列(codevs 1250)
题目描述 Description 定义:f0=f1=1, fn=fn-1+fn-2(n>=2).{fi}称为Fibonacci数列. 输入n,求fn mod q.其中1<=q<=30 ...
- strtod-strtod, 字符串 转 数字 函数
strtod()会扫描参数nptr字符串,跳过前面的空格字符,直到遇上数字或正负符号才开始做转换,到出现非数字或字符串结束时('\0')才结束转换,并将结果返回.若endptr不为 NULL,则会将遇 ...
- Linux下安装.bundle后缀的程序
按照如下操作: #赋予可执行权限 sudo chmod +x XXXXX.bundle #使用root权限启动 sudo ./XXXXX.bundle
- Bootstrap基础--文本对齐风格
在排版中离不开文本的对齐方式.在CSS中常常使用text-align来实现文本的对齐风格的设置.其中主要有四种风格: ☑ 左对齐,取值left ☑ 居中对齐,取值center ☑ 右对齐,取值r ...