题目地址:http://acm.hdu.edu.cn/showproblem.php?pid=1227

题意:一维坐标上有n个点,位置已知,选出k(k <= n)个点,使得所有n个点与选定的点中最近的点的距离总和最小,求出最小值。

思路:

将点i的距离记为为dis[i],从i到j选出一点使此段距离和最小,则此点坐标为dis[(i + j) / 2]

cost[i][j]为从i到j选出一点距离和的最小值。则求cost[i][j]的代码如下:

  cost[i][j] = 0;
  for(int k = i; k <= j; k++){
    cost[i][j] += abs(dis[(i + j)/2] - dis[k]);
  }

dp[i][j]表示从1到i选择j个点的最小值,则状态转移方程如下:

dp[i][j] = min(dp[k][j - 1] + cost[k + 1][i]) (j - 1 <= k <i)

代码如下,注意边界情况的处理,表示我也很头疼边界情况

#include<iostream>
#include<cstdio>
#include<string>
#include<cstring>
#include<cstdlib>
#include<queue>
#include<vector>
#include<algorithm>
using namespace std;
typedef long long LL;
const int N = ;
LL dp[N][], cost[N][N];
int dis[N];
int main(){
int n, m, cs = ;
while(~scanf("%d %d", &n ,&m) && n && m ){
for(int i = ; i <= n ; i++){
scanf("%d", &dis[i]);
}
memset(cost, 0x3F, sizeof(cost));
memset(dp, 0x3F, sizeof(dp));
for(int i = ; i <= n ; i++){
for(int j = i; j <= n ;j++){
cost[i][j] = ;
for(int k = i; k <= j; k++){
cost[i][j] += abs(dis[(i + j)/] - dis[k]);
} }
}
for(int i = ; i <= n; i++){
dp[i][] = cost[][i];
}
for(int j = ; j <= m ; j++){
for(int i = j; i <= n; i++){
for(int k = j - ; k < i; k++){
dp[i][j] = min(dp[i][j], dp[k][j - ] + cost[k + ][i]);
}
}
}
cs++;
printf("Chain %d\nTotal distance sum = %I64d\n\n",cs,dp[n][m]);
}
return ;
}

HDU 1227 Fast Food的更多相关文章

  1. [ACM] HDU 1227 Fast Food (经典Dp)

    Fast Food Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others) Total ...

  2. HDU 1227 Fast Food (DP)

    题目链接 题意 : 有n个饭店,要求建k个供应点,要求每个供应点一定要建造在某个饭店的位置上,然后饭店都到最近的供应点拿货,求出所有饭店到最近的供应点的最短距离. 思路 : 一开始没看出来是DP,后来 ...

  3. hdu 1227 Fast Food(DP)

    题意: X轴上有N个餐馆.位置分别是D[1]...D[N]. 有K个食物储存点.每一个食物储存点必须和某个餐厅是同一个位置. 计算SUM(Di-(离第i个餐厅最近的储存点位置))的最小值. 1 < ...

  4. hdu 4965 Fast Matrix Calculation(矩阵高速幂)

    题目链接.hdu 4965 Fast Matrix Calculation 题目大意:给定两个矩阵A,B,分别为N*K和K*N. 矩阵C = A*B 矩阵M=CN∗N 将矩阵M中的全部元素取模6,得到 ...

  5. HDU 4965 Fast Matrix Calculation(矩阵高速幂)

    HDU 4965 Fast Matrix Calculation 题目链接 矩阵相乘为AxBxAxB...乘nn次.能够变成Ax(BxAxBxA...)xB,中间乘n n - 1次,这样中间的矩阵一个 ...

  6. hdu 4965 Fast Matrix Calculation

    题目链接:hdu 4965,题目大意:给你一个 n*k 的矩阵 A 和一个 k*n 的矩阵 B,定义矩阵 C= A*B,然后矩阵 M= C^(n*n),矩阵中一切元素皆 mod 6,最后求出 M 中所 ...

  7. HDU 3577 Fast Arrangement (线段树区间更新)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=3577 题意不好理解,给你数字k表示这里车最多同时坐k个人,然后有q个询问,每个询问是每个人的上车和下车 ...

  8. HDU - 3577 Fast Arrangement 线段树

    Fast Arrangement Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/65536 K (Java/Others) ...

  9. hdu 1227(动态规划)

    Fast Food Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others)Total S ...

随机推荐

  1. Java微博搜索关键字采集

    import java.io.File; import java.io.FileInputStream; import java.io.FileNotFoundException; import ja ...

  2. phpcms前台退出登录的时候提示信息'退出成功0'

    问题背景: phpcms前台退出登录的时候,提示了一个退出成功0 让我很困惑为啥有个0呢? 问题分析: 进入 ./phpcms/modules/member/index.php 找到logout方法, ...

  3. .NET中六个重要的概念:栈、堆、值类型、引用类型、装箱和拆箱 (转)

    作者: Edison Chou  来源: 博客园  发布时间: 2014-09-03 15:59  阅读: 318 次  推荐: 2   原文链接   [收藏]   原文作者:Shivprasad k ...

  4. Hadoop2.2.0环境下Sqoop1.99.3安装

    本文转载自http://blog.csdn.net/liuwenbo0920/article/details/40504045 1.安装准备工作: 已经装好的hadoop环境是hadoop 2.2.0 ...

  5. 7.31 签到,js 全局预处理笔记

    js 解析与执行过程: 一.全局:  1.预处理阶段 : 1.LexicalEnviroment === window {1.预处理 var   |   2.function xxx //预处理申明的 ...

  6. C#之设置无边框后如何移动窗体(转)

    转载:http://www.cnblogs.com/techmango/archive/2012/03/31/2427523.html 第一种,利用windows的消息机制来实现: 首先﹐.定义鼠標左 ...

  7. poj 3984

    http://poj.org/problem?id=3984 题目很简单,就是简单的BFS吧,主要的难点在于坐标的问题 这个呢,可以反其道而行之,就是你从(1,1)到(5,5),你肯定走过一次 走过一 ...

  8. 常见web错误码 404 500

    404表示文件或资源未找到java WEB常见的错误代码1.1xx-信息提示:这些状态代码表示临时的响应.客户端在收到常规响应之前,应准备接收一个或多个1xx响应.100-继续.101-切换协议.2. ...

  9. perl q qq qr qw qx 区别与使用方法

    1.q 相当于 单引号' ' 转义字符无效 q可以使用()[] {} // ,, 2.qq 相当于" " 转义字符有效 qq可以使用()[] {} // ,, 3.qw  相当于 ...

  10. ACM/ICPC 之 最短路径-dijkstra范例(ZOJ2750-POJ1135(ZOJ1298))

    最短路经典算法-dijkstra范例(两道),第一道是裸的dijkstra,第二道需要枚举所有边已找到可能的情况. ZOJ2750-Idiomatic Phrases Game 题意:见Code 题解 ...