HDU 1227 Fast Food (DP)
题意 : 有n个饭店,要求建k个供应点,要求每个供应点一定要建造在某个饭店的位置上,然后饭店都到最近的供应点拿货,求出所有饭店到最近的供应点的最短距离。
思路 : 一开始没看出来是DP,后来想想就想通了。预处理,如果要在下标为 i 到 j 的饭店建一个供应点,那一定是在下标为(i+j)/2的位置建造的,状态转移方程:dp[i][j] = dp[i-1][k-1]+dis[k][j](i <= k <= j) ,dp[i][j]代表的是在前 j 个饭店中建了 i 个供应点的最小距离。方程代表的是在前k-1个饭店中已经建了i-1个供应点的最小距离再加上从第k个饭店到第j个饭店建一个供应点增加的距离。如果不明白可以看这里,链接
#include <iostream>
#include <stdio.h>
#include <string.h>
#include <math.h> using namespace std;
const int maxn = 0x7fffffff ; int a[] ,dis[][],dp[][]; int main()
{
int n,k ,cas = ;
while(~scanf("%d %d",&n,&k))
{
if(n == && k == ) break ;
for(int i = ; i <= n ; i++)
scanf("%d",&a[i]) ;
for(int i = ; i <= n ; i++)
{
for(int j = i ; j <= n ; j++)
{
dis[i][j] = ;
for(int k = i ; k <= j ; k++)
dis[i][j] += fabs(a[k]-a[(i+j)/] );
}
}
memset(dp,,sizeof(dp)) ;
for(int i = ; i <= n ; i++)
dp[][i] = dis[][i] ;
for(int i = ; i <= k; i++)
{
for(int j = ; j <= n ; j++)
{
int minn = maxn ;
for(int k = i ; k <= j ; k++)
{
if(dp[i-][k-]+dis[k][j] < minn)
minn = dp[i-][k-]+dis[k][j] ;
}
dp[i][j] = minn ;
}
}
printf("Chain %d\nTotal distance sum = %d\n\n",cas++,dp[k][n]);
}
return ;
}
HDU 1227 Fast Food (DP)的更多相关文章
- [ACM] HDU 1227 Fast Food (经典Dp)
Fast Food Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others) Total ...
- hdu 1227 Fast Food(DP)
题意: X轴上有N个餐馆.位置分别是D[1]...D[N]. 有K个食物储存点.每一个食物储存点必须和某个餐厅是同一个位置. 计算SUM(Di-(离第i个餐厅最近的储存点位置))的最小值. 1 < ...
- HDU 1227 Fast Food
题目地址:http://acm.hdu.edu.cn/showproblem.php?pid=1227 题意:一维坐标上有n个点,位置已知,选出k(k <= n)个点,使得所有n个点与选定的点中 ...
- hdu 4144 状态压缩dp
#include<map> #include<set> #include<cmath> #include<queue> #include<cstd ...
- HDU 1011 树形背包(DP) Starship Troopers
题目链接: HDU 1011 树形背包(DP) Starship Troopers 题意: 地图中有一些房间, 每个房间有一定的bugs和得到brains的可能性值, 一个人带领m支军队从入口(房 ...
- hdu 4965 Fast Matrix Calculation(矩阵高速幂)
题目链接.hdu 4965 Fast Matrix Calculation 题目大意:给定两个矩阵A,B,分别为N*K和K*N. 矩阵C = A*B 矩阵M=CN∗N 将矩阵M中的全部元素取模6,得到 ...
- hdu 2296 aC自动机+dp(得到价值最大的字符串)
Ring Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Total Submis ...
- HDU 4778 状压DP
一看就是状压,由于是类似博弈的游戏.游戏里的两人都是绝对聪明,那么先手的选择是能够确定最终局面的. 实际上是枚举最终局面情况,0代表是被Bob拿走的,1为Alice拿走的,当时Alice拿走且满足变换 ...
- HDOJ(HDU).3466 Dividing coins ( DP 01背包 无后效性的理解)
HDOJ(HDU).3466 Dividing coins ( DP 01背包 无后效性的理解) 题意分析 要先排序,在做01背包,否则不满足无后效性,为什么呢? 等我理解了再补上. 代码总览 #in ...
随机推荐
- c++11之右值引用
本文大部分来自这里,并不是完全着行翻译,如有不明白的地方请参考原文. 在c++中,创建临时对象的开销对程序的影响一直很大,比如以下这个例子: String getName(){ return “Kia ...
- 如何设置fedora默认从命令行启动?
Sumary:因为在fedora中没有/etc/initab文件我们不方便从这里设置它的runlevel target,但是linux又给我们提供了一个强悍的工具systemd,我们可以用system ...
- CentOS6.4安装LAMP环境
1.配置防火墙,开放80.3306端口 vi /etc/sysconfig/iptables -A INPUT -m state --state NEW -m tcp -p tcp --dport - ...
- emmet(Zen coding)帮助文档
葵花宝典终可成,半途而废万事空. 官方地址:http://docs.emmet.io/cheat-sheet/ 我导出了pdf版,需要的同学可以下载: 链接:http://pan.baidu.com/ ...
- Operating Cisco Router
Operating Cisco Router consider the hardware on the ends of the serial link, in particular where the ...
- R语言基础(二) 可视化基础
> which.max(apply(x[c("x1","x2","x3")], 1, sum))49 > x$num[which ...
- Redis 三:存储类型之字符串
.赋值单个: [赋值多个:mset a b c ] .取值单个: get a [取值多个:mget a b c] .数字递增 incr a 在a的基础上+,那就是返回101 如果预先的值为0,那么返回 ...
- 【Python】 最简单的web服务
python -m SimpleHTTPServer 8321 1.python 没有指定目录的参数 想启动目录 就cd到该目录下 2.在目录下创建一个index.html 3.启动web服务,(端 ...
- margin负值在页面布局中的应用
http://www.w3school.com.cn/tiy/t.asp 预览工具 一.左右列固定,中间列自适应布局 此例适用于左右栏宽度固定,中间栏宽度自适应的布局.由于网页的主体部分一般在中间,很 ...
- 关闭ios虚拟键盘的几种方法
在iOS应用开发中,有三类视图对象会打开虚拟键盘,进行输入操作,但如何关闭虚拟键盘,却没有提供自动化的方法.这个需要我们自己去实现.这三类视图对象分别是UITextField,UITextView和U ...