Fast Food

My Tags (Edit)

Source : Unknown

Time limit : 3 sec Memory limit : 32 M

Submitted : 3777, Accepted : 1147

The fastfood chain McBurger owns several restaurants along a highway. Recently, they have decided to build several depots along the highway, each one located at a restaurant and supplying several of the restaurants with the needed ingredients. Naturally, these depots should be placed so that the average distance between a restaurant and its assigned depot is minimized. You are to write a program that computes the optimal positions and assignments of the depots.

To make this more precise, the management of McBurger has issued the following specification: You will be given the positions of n restaurants along the highway as n integers d1 < d2 < … < dn (these are the distances measured from the company’s headquarter, which happens to be at the same highway). Furthermore, a number k (k <= n) will be given, the number of depots to be built.

The k depots will be built at the locations of k different restaurants. Each restaurant will be assigned to the closest depot, from which it will then receive its supplies. To minimize shipping costs, the total distance sum, defined as

must be as small as possible.

Write a program that computes the positions of the k depots, such that the total distance sum is minimized.

Input

The input file contains several descriptions of fastfood chains. Each description starts with a line containing the two integers n and k. n and k will satisfy 1 <= n <= 200, 1 <= k <= 30, k <= n. Following this will n lines containing one integer each, giving the positions di of the restaurants, ordered increasingly.

The input file will end with a case starting with n = k = 0. This case should not be processed.

Output

For each chain, first output the number of the chain. Then output a line containing the total distance sum.

Output a blank line after each test case.

Sample Input

6 3

5

6

12

19

20

27

0 0

Sample Output

Chain 1

Total distance sum = 8

在写这道题目的时候,有想过dp[i][j],第i个店铺有j个中转站可以获得的最短距离。可是就不知道后面该怎么办了,第i个店铺和第i-1的店铺状态怎么转移。但是如果是第j个中转站和第j-1个中转站呢?这道题目还有一个关键的点从i到j的店铺中,只有一个中转站是最短距离就是中转站在(i+j)/2。

这里写代码片#include <iostream>
#include <string.h>
#include <stdlib.h>
#include <math.h>
#include <algorithm> using namespace std;
#define MAX 1<<30
int dp[205][35];
int c[205][205];
int a[205];
int n,k;
int main()
{
int cas=0;
while(scanf("%d%d",&n,&k)!=EOF)
{
if(n==0&&k==0)
break;
for(int i=1;i<=n;i++)
scanf("%d",&a[i]);
memset(c,0,sizeof(c));
for(int i=1;i<=n;i++)
for(int j=i;j<=n;j++)
for(int p=i;p<=j;p++)
c[i][j]+=abs(a[p]-a[(i+j)/2]);
for(int i=0;i<=n;i++)
for(int j=0;j<=k;j++)
dp[i][j]=MAX;
dp[0][0]=0;
for(int i=1;i<=n;i++)
{
for(int j=0;j<i;j++)
{
for(int p=1;p<=k;p++)
{
dp[i][p]=min(dp[i][p],dp[j][p-1]+c[j+1][i]);
}
}
}
printf("Chain %d\n",++cas);
printf("Total distance sum = %d\n\n",dp[n][k]); }

HOJ-1005 Fast Food(动态规划)的更多相关文章

  1. HOJ题目分类

    各种杂题,水题,模拟,包括简单数论. 1001 A+B 1002 A+B+C 1009 Fat Cat 1010 The Angle 1011 Unix ls 1012 Decoding Task 1 ...

  2. [NOIp2007提高组]矩阵取数游戏

    OJ题号:洛谷1005 思路: 动态规划. 不难发现每行能够取得的最大值仅与当前行的数据有关,因此本题可以对每行的数据分别DP,最后求和. 设$f_{i,j}$表示左边取$i$个.右边取$j$个的最大 ...

  3. HOJ 2139 Spiderman's workout(动态规划)

    Spiderman's workout My Tags (Edit) Source : Nordic Collegiate Programming Contest 2003 Time limit : ...

  4. 题解西电OJ (Problem 1005 -跳舞毯)--动态规划

    Description zyf不小心得了一种怪病,为了维持一天的精力他必须不停跳动.于是他买了一条跳舞毯,每天跳上几小时.众所周知,跳舞毯是给定一个序列,让你在指定时间踏指定的按钮,但zyf似乎不怎么 ...

  5. Codeforces 866C Gotta Go Fast - 动态规划 - 概率与期望 - 二分答案

    You're trying to set the record on your favorite video game. The game consists of N levels, which mu ...

  6. HOJ 2133&POJ 2964 Tourist(动态规划)

    Tourist Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 1503 Accepted: 617 Description A ...

  7. HOJ 2252 The Priest(动态规划)

    The Priest Source : 计算机学院第二届"光熙杯"程序设计大赛 Time limit : 3 sec Memory limit : 32 M Submitted : ...

  8. HOJ 13845 Atomic Computer有向无环图的动态规划

    考虑任意一个数字,任何一个都会有奇怪的..性质,就是一个可以保证不重复的方案——直接简单粗暴的最高位加数字..于是,如同上面的那个题:+1.-1.0 但是考虑到65536KB的标准内存限制,会得出一个 ...

  9. HOJ 2124 &POJ 2663Tri Tiling(动态规划)

    Tri Tiling Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 9016 Accepted: 4684 Descriptio ...

随机推荐

  1. js合并.css合并工具

    http://www.neoease.com/css-javascript-combo-tool/ http://www.neoease.com/minimize-javascript-files-u ...

  2. Tomcat 8

    JDTCompiler.java /** * Compile the jsp file from the current engine context. As an side- effect, * t ...

  3. SpringMVC由浅入深day02_10拦截器

    10 拦截器 Spring Web MVC 的处理器拦截器类似于Servlet 开发中的过滤器Filter,用于对处理器进行预处理和后处理. 10.1 拦截定义 定义拦截器,实现HandlerInte ...

  4. Hibernate_day01讲义_使用Hibernate完成对CRM系统中客户管理的DAO中的CRUD的操作

  5. 【Python 爬虫系列】从某网站下载小说《鬼吹灯》,正则解析html

    import re import urllib.request import urllib.parse import urllib.error as err import time # 下载 seed ...

  6. 【GIS】ArcGIS Server密码

    1.C:\Program Files\ArcGIS\Server\tools\passwordreset 2.PasswordReset -l 列出管理站点的管理员用户的名称 3.PasswordRe ...

  7. CentOS下安装高版本GCC

    CentOS下安装高版本GCC 微信分享:   有时编译需要用到4.8以上版本的GCC,由于CentOS源没有提供高版本的GCC安装包,这时就不能通过安装包安装.通常的解决方案就是通过编译安装高版本的 ...

  8. python的httplib、urllib和urllib2的区别及用

    慢慢的把它们总结一下,总结就是最好的学习方法 宗述 首先来看一下他们的区别 urllib和urllib2 urllib 和urllib2都是接受URL请求的相关模块,但是urllib2可以接受一个Re ...

  9. Python 管理 MySQL

    Python MySQLdb 模块 Python pymysql 模块 Python SQLAlchemy 模块 Python ConfigParser 模块 Python 创建 MySQL 配置文件 ...

  10. Linux下用C获取当前时间

    Linux下用C获取当前时间,具体如下: 代码(可以把clock_gettime换成time(NULL)) ? 1 2 3 4 5 6 7 8 9 10 void getNowTime() {  ti ...