poj1161Post Office【经典dp】
题目:poj1161Post Office id=1160" target="_blank">点击打开链接
题意:给出一条直线上的n个坐标表示村庄的位置,然后要在上面建p个邮局。村民优先选择去近的邮局。问全部村庄去邮局的最小距离和是多少?
分类:区间dp
分析:对于随意一个村庄,仅仅有两种选择,要么在这儿建邮局。要么不建,我们能够预处理出来随意两件建立一个邮局的的最小距离w【i】【j】,而对于随意两点,建立一个邮局的最优方案是建立在两点的中位数上,即(i+j)/2。位置。
对于随意两点 i---j ,建立两个邮局的最优结果我们能够由建立一个的得到。枚举分点,然后从中间分开。前面建一个,后面建一个。
那么我们就能够写出状态及方程
定义状态:dp【i】【j】表示在前 i 个存在建立 j 个邮局的最小距离。
转移方程:dp【i】【j】=min(dp【i】【j】。dp【k】【j-1】+w【k+1】【i】) (j-1<=K<=i-1)
注意:
1:这个题目的dp方向是邮局数目。不是村庄数目,有建立邮局的数目1----p的方向dp
2:注意dp初始化后,其它值一定在循环内部初始化,否则不一定最优、
代码:
#include <cstdio>
#include <cstring>
#include <algorithm>
#include <iostream>
#include <map>
#include <cmath>
using namespace std;
#define Del(a,b) memset(a,b,sizeof(a))
const int N = 500;
int w[N][N];
int dp[N][45];
int dis[N]; int main()
{
//freopen("Input.txt","r",stdin);
int n,k;
while(~scanf("%d%d",&n,&k))
{
for(int i=1;i<=n;i++)
scanf("%d",&dis[i]);
Del(w,0);
for(int i=1;i<=n;i++)
{
for(int j=i+1;j<=n;j++)
{
w[i][j] = w[i][j-1]+ dis[j] - dis[(i+j)/2];
}
//printf("\n");
}
Del(dp,0x3f3f3f3f);
for(int i=1;i<=n;i++)
{
dp[i][1]=w[1][i];
dp[i][i]=0;
}
for(int j=2;j<=k;j++)
{
for(int i=j+1;i<=n;i++)
{
dp[i][j]=0x3f3f3f3f;//注意标准写法
for(int f=j-1;f<=i-1;f++)
dp[i][j]=min(dp[i][j],dp[f][j-1]+w[f+1][i]);
}
}
printf("%d\n",dp[n][k]);
}
return 0;
}
poj1161Post Office【经典dp】的更多相关文章
- POJ 1160:Post Office 邮局经典DP
Post Office Time Limit: 1000MS Memory Limit: 10000K Total Submissions: 17168 Accepted: 9270 Desc ...
- HDU 1003 Max Sum --- 经典DP
HDU 1003 相关链接 HDU 1231题解 题目大意:给定序列个数n及n个数,求该序列的最大连续子序列的和,要求输出最大连续子序列的和以及子序列的首位位置 解题思路:经典DP,可以定义 ...
- poj1458 求最长公共子序列 经典DP
Common Subsequence Time Limit: 1000MS Memory Limit: 10000K Total Submissions: 45763 Accepted: 18 ...
- NYOJ - 矩形嵌套(经典dp)
矩形嵌套时间限制:3000 ms | 内存限制:65535 KB 描述 有n个矩形,每个矩形可以用a,b来描述,表示长和宽.矩形X(a,b)可以嵌套在矩形Y(c,d)中当且仅当a<c,b< ...
- 51nod 1412 AVL树的种类(经典dp)
http://www.51nod.com/onlineJudge/questionCode.html#!problemId=1412 题意: 思路: 经典dp!!!可惜我想不到!! $dp[i][k] ...
- NYOJ 16 矩形嵌套(经典DP)
http://acm.nyist.net/JudgeOnline/problem.php?pid=16 矩形嵌套 时间限制:3000 ms | 内存限制:65535 KB 难度: ...
- poj 1050 To the Max 最大子矩阵和 经典dp
To the Max Description Given a two-dimensional array of positive and negative integers, a sub-rect ...
- CS Academy Distinct Neighbours(经典dp)
CS Academy Distinct Neighbours(经典dp) 题意: 求相邻无相同数字的合法的排列数 题解: 题解 先将相同的数字分为一类,假设共有n组 定义\(dp[i][j]\)表示前 ...
- 【经典dp 技巧】8.13序列
经典的拆绝对值 题目大意 给定$n$个具有顺序的序列,允许对每个序列循环移动.记第$i$个序列尾元素为$x$,$i+1$个序列首元素为$y$,定义其连接收益为$|x-y|*i$,求$n$个序列连接最大 ...
随机推荐
- POJ-1002-487-3279(字符串)
487-3279 Time Limit: 2000MS Memory Limit: 65536K Total Submissions: 309685 Accepted: 55292 Descripti ...
- 22. SCHEMA_PRIVILEGES
22. SCHEMA_PRIVILEGES SCHEMA_PRIVILEGES表提供有关schema(数据库)特权的信息.它从mysql.db系统表中获取其值. SCHEMA_PRIVILEGES表有 ...
- JDBC-Web项目导入mysql驱动包路径-Eclipse & Myeclipse
初学JAVA,很多都不懂,开始听老师说导入数据库驱动包的时候是: 右键项目 -> Properties -> Java Build Path -> 右侧选项卡选择Libraries ...
- 【HIHOCODER 1513】 小Hi的烦恼 (BitSet)
描述 小Hi从小的一大兴趣爱好就是学习,但是他发现尽管他认真学习,依旧有学神考的比他好. 小Hi在高中期间参加了市里的期末考试,一共五门:语文.数学.英语.物理.化学. 成绩出来之后,小Hi发现有些同 ...
- 算法导论 第八章 线性时间排序(python)
比较排序:各元素的次序依赖于它们之间的比较{插入排序O(n**2) 归并排序O(nlgn) 堆排序O(nlgn)快速排序O(n**2)平均O(nlgn)} 本章主要介绍几个线性时间排序:(运算排序非比 ...
- Vue微信自定义分享时安卓系统config:ok,ios系统config:invalid signature签名错误,或者安卓和ios二次分享时均config:ok但是分享无效的解决办法
简述需求:要求指定页面可以进行微信自定义分享(自定义标题,描述,图片,链接),剩下的页面隐藏所有基础接口.二次分享依然可以正常使用,切换至其他页面也可以正常进行自定义分享. 这两天在做微信自定义分享的 ...
- JavaScript中上传文件为图片如何读取+JS中如何使用clip()剪切指定区域(UI组件之图片剪裁器)
File读取和FileReader() //获取上传的文件/图片 function getFile(){ var files,len; var reader = new FileReader(); v ...
- PS小demo
1.打开图像素材. 2.图层 >> 添加调整图层 >> 色相/饱和度. 得到如下效果: 3.创建新图层,将图层混合模式设为“柔光”,选择笔刷工具,硬度100%,按下图所示绘制该 ...
- 深刻理解下js的prototype
参考 http://aralejs.org/class/docs/competitors.html, http://www.iteye.com/topic/248933,http://www.cnbl ...
- python019 Python3 File(文件) 方法
file 对象使用 open 函数来创建,下表列出了 file 对象常用的函数: 序号 方法及描述 1 file.close() 关闭文件.关闭后文件不能再进行读写操作. 2 file.flush() ...