题意:

题目链接
  有一排村庄,坐标表示村庄的位置。如(1、4、6、10)表示:在这几个点有村庄。现在要在这一排村庄中建立邮局,使得其它村庄到他们最近邮局的距离总和最小。
其中邮局有V个(V<=300),邮局有P个(P<=30)。问怎么设置邮局位置,求出最小距离。

解法:

1.表示方法

  • dp[ii][jj] : 表示前 ii 个村庄 建 jj 个邮局时距离最小值。
  • sum[i][j][i][j]: 表示第 ii 个村庄到第 jj 个村庄建一个邮局的最小距离。

2. 递推公式的由来

这个题目有点类似于矩阵连乘问题。要求dp[i][j]dp[i][j],假设从kk位置断开,前 kk 个村庄建 j−1j-1个邮局,后面k+1k+1 到 ii 建一个邮局,然后求出断开位置使dp[i][j]dp[i][j] 最小。所以递推关系式如下:

  • dp[i][j]=min(dp[i][j],dp[k][j−1]+sum[k+1][i])dp[i][j] = min(dp[i][j], dp[k][j-1] + sum[k+1][i]);

3.sum[i][j]sum[i][j]的递推

在ii 和 jj之间建一个邮局,显然建在中位数的村庄位置时最小。因为题中村庄的位置已经从小到大排好序,因此只要求出中位数村庄即可(这里与村庄的位置大小无关)。

  • 如果村庄有奇数个,比如有三个村庄:x1,x2,x3x_1, x_2, x_3, x1到x2的距离为s1,x2到x3的距离为s2x_1到x_2的距离为s_1, x_2到x_3的距离为s_2, 显然建在x2x_2时距离最小为:s1+s2s_1 + s_2。(可以自己造几个case看看).
  • 如果村庄个数为偶数个,那么建在中间两个位置的距离是一样的。比如:x1,x2,x3,x4x_1, x_2, x_3,x_4, x1到x2的距离为s1,x2到x3的距离为s2,x3到x4的距离为s3x_1到x_2的距离为s_1, x_2到x_3的距离为s_2,x_3到x_4的距离为s_3,那么建在中间两个村庄的距离是一样的。建在x2x_2:s1+2∗s2+s3s_1 + 2*s_2 + s_3,
    建在x3x_3:s1+2∗s2+s3s_1 + 2*s_2 + s_3。 建在x1x_1: 3∗s1+2∗s2+s33*s_1 + 2*s_2 + s_3。

  • 因此:在ii到jj之间建一个邮局的最小距离等于在ii到j−1j-1之间建一个邮局的距离最小值加上jj点到中位数村庄的距离。即:sum[i][j]=sum[i][j]+x[j]−x[(i+j)/2]sum[i][j] = sum[i][j] + x[j] - x[(i+j)/2]

代码:

#include <iostream>
#include <cstring>
#include <cstdio>
#include <algorithm>
#include <cmath>using namespace std;int dp[300+1][300+1],sum[300+1][300+1];
int s[300+1];
int INF = 100000000;int main()
{int V,P;scanf("%d%d",&V,&P);memset(dp,sizeof(dp),0);memset(sum,sizeof(sum),0);memset(s, sizeof(s), 0);for(int i = 1; i<=V; i++)scanf("%d",&s[i]);for(int i = 1; i<V; i++){for(int j = i+1; j<=V; j++)sum[i][j] = sum[i][j-1] + s[j] - s[(i+j)/2];}for(int i = 1; i<=V; i++)dp[i][1] = sum[1][i];for(int j = 2; j<=P; j++){for(int i = 1; i<=V; i++){dp[i][j] = INF;for(int k = 1; k<=i; k++)dp[i][j] = min(dp[i][j] ,dp[k][j-1]+sum[k+1][i]);}}printf("%d\n",dp[V][P]);return 0;
}

DP POJ1160相关推荐

  1. [转]四边形不等式优化dp(POJ1160)

    四边形不等式优化动态规划原理: 1.当决策代价函数w[i][j]满足w[i][j]+w[i'][j']<=w[I;][j]+w[i][j'](i<=i'<=j<=j')时,称w ...

  2. DP动态规划--乡村邮局问题-Post Office(POJ-1160)python

    DP–乡村邮局问题-Post Office Sample Input 10 5 1 2 3 6 7 9 11 22 44 50 Sample Output 9 python 版本 def arrang ...

  3. DP总结 ——QPH

    常见优化 单调队列 形式 dp[i]=min{f(k)} dp[i]=max{f(k)} 要求 f(k)是关于k的函数 k的范围和i有关 转移方法 维护一个单调递增(减)的队列,可以在两头弹出元素,一 ...

  4. dp,sp,px相互转化

    方法一: public int sp2px(float sp) {return (int) TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_SP, ...

  5. [JS][dp]题解 | #打家劫舍(一)#

    题解 | #打家劫舍(一)# 题目链接 打家劫舍(一) 题目描述 描述 你是一个经验丰富的小偷,准备偷沿街的一排房间,每个房间都存有一定的现金,为了防止被发现,你不能偷相邻的两家,即,如果偷了第一家, ...

  6. HDU 2084 数塔(DP)(JAVA版)

    数塔 Time Limit: 1000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) Total Submiss ...

  7. dp cf 20190615

    A. Timofey and a tree 这个不算是dp,就是一个思维题,好难想的思维题,看了题解才写出来的, 把点和边分开,如果一条边的两个点颜色不同就是特殊边,特殊边两边连的点就叫特殊点, 如果 ...

  8. BZOJ 1003[ZJOI2006]物流运输(SPFA+DP)

    Problem 1003. -- [ZJOI2006]物流运输 1003: [ZJOI2006]物流运输 Time Limit: 10 Sec  Memory Limit: 162 MB Submit ...

  9. [NOI2005]聪聪与可可(期望dp)

    题意:给一张无向图,有一只猫和一只老鼠,猫每秒会向老鼠的方向移动两个单位,若它们的距离为一,那么只会移动一个单位,老鼠会等概率向周围移动一步或不动,求猫抓到老鼠的期望时间. Solution luog ...

  10. Codeforces 903F Clear The Matrix(状态压缩DP)

    题目链接 Clear The Matrix 题意 给定一个$4 * n$的矩形,里面的元素为$'.'$或$'*'$.现在有$4$种正方形可以覆盖掉$'*'$,正方形的边长分别为$1,2,3,4$. 求 ...

最新文章

  1. 软件测试技术——系统测试
  2. 【前端面试题】2021/3/12挺经典的面试题,这个经历很深刻。
  3. dmo Java_java DMO及增删改查代码的自动生成
  4. ASP.NET 2.0中CSS失效的问题总结
  5. PHP 面向对象的简单介绍
  6. 安装mysql报curses的解决
  7. apache iotdb_高性能轻体量物联网数据库Apache IoTDB
  8. android 分组柱状图_Android自定义柱状图控件
  9. 灵飞经5龙生九子 第二十一章 危机四伏 2
  10. virtualbox win10 共享文件夹
  11. bong手环显示连接不上服务器,bong智能手环使用说明
  12. Java开发对接招行一网通支付功能的总结
  13. 联想拯救者r720适合java么_这次绝无短板!4GB显存版联想游戏本拯救者R720入手实测...
  14. maven 配置多个仓库
  15. 查看自己的GitHub地址
  16. Shiro基础应用——角色和权限校验
  17. NoSQL学习笔记之MongoDB-01初识NoSQL
  18. 近端策略优化算法(PPO)
  19. 收购Five9被称为“天作之合”,Zoom能否靠买买买换来高增长?
  20. turfjs前端地理空间分析类库

热门文章

  1. 【全是干货!伸手党福利】通过银行卡号判断出所属银行信息
  2. asp mysql rs.recordcount_asp中rs.recordcount 返回值总是为-1的解决方法
  3. uint8_t和char的相互转换
  4. 修改xshell的配色方案
  5. 【vbs消息轰炸代码】
  6. 使用图灵机器人笑话功能提高微信公众帐号活跃度
  7. 好用的微信群管理软件
  8. 10月业务安全月报 | 美国将奇虎360和知道创宇列入黑名单;丰田泄露30万用户信息;苹果曝严重漏洞
  9. MFC编程 小说分割器
  10. Router路由守卫