zoukankan      html  css  js  c++  java
  • 【LSGDOJ 1408】邮局

    题目描述

    一些村庄被建在一条笔直的高边公路边上。我们用一条坐标轴来描述这条高边公路,每一个村庄的坐标都是整数。没有两个村庄坐标相同。两个村庄问的距离,定义为它们坐标值差的绝对值。
    我们需要在一些村庄建立邮局一一当然,并不是每一个村庄都必须建立邮局。邮局 必须被建在村庄里,因此它的坐标和它所在的村庄坐标相同。每个村庄使用离它最近的 那个邮局,建立这些邮局的原则是:所有村庄到各自所使用的邮局的距离总和最小。你的任务是编写一个程序,在给定了每个村庄的坐标和将要建立的邮局数之后,按照上述原则,合理地选择这些邮局的位置。

    输入

    第一行包含两个整数:第一个整数是村庄的数目 V,1≤V≤300;第二个整数是将建立的邮局数 P,1≤P≤30 且 P≤V。
    第二行按照递增顺序列出了 V 个整数。这 V 个整数分别表示了各村庄的位 置坐标。对于每一个位置坐标 X,1≤X≤10000。

    输出

    第一行是一个整S,表示你所求出的所有村庄到离它最近邮局的距离的总和。

    样例输入

    10 5 1 2 3 6 7 9 11 22 44 50

    样例输出

    9

    提示

    在2 7 22 44 50建立邮局
     
    题解:
    先处理出dis[i][j]数组,表示i到j中建一个邮局需要的总路程,很明显一个区间中选中间位置会使总路程最小.
    然后就是简单DP:F[i][k]表示前i个村庄建k个邮局最小的总路程.
    F[i][k]=min(F[j][k-1]+dis[j+1][i],F[i][k]); k是枚举的邮局数量.
     1 #include<iostream>
     2 #include<cstdio>
     3 #include<algorithm>
     4 #include<cstring>
     5 #include<cmath>
     6 using namespace std;
     7 const int N=305,M=32,INF=199999999;
     8 int gi(){
     9     int str=0;char ch=getchar();
    10     while(ch>'9' || ch<'0')ch=getchar();
    11     while(ch>='0' && ch<='9')str=str*10+ch-'0',ch=getchar();
    12     return str;
    13 }
    14 int x[N],dis[N][N],F[N][M];
    15 int main()
    16 {
    17     int n=gi(),p=gi(),mid;
    18     for(int i=1;i<=n;i++)x[i]=gi();
    19     for(int i=1;i<=n;i++)
    20     {
    21         for(int j=i+1;j<=n;j++)
    22         {
    23             mid=(i+j)>>1;
    24             for(int k=i;k<=j;k++)
    25             dis[i][j]+=abs(x[mid]-x[k]);
    26         }
    27     }
    28     memset(F,127/3,sizeof(F));
    29     for(int i=1;i<=n;i++)F[i][1]=dis[1][i];
    30     for(int k=2;k<=p;k++)
    31     {
    32         F[k][k]=0;
    33         for(int i=k+1;i<=n;i++)
    34         {
    35             for(int j=k-1;j<i;j++)
    36             {
    37                 F[i][k]=min(F[j][k-1]+dis[j+1][i],F[i][k]);
    38             }
    39         }
    40     }
    41     printf("%d",F[n][p]);
    42     return 0;
    43 }
  • 相关阅读:
    【Ecstore2.0】计划任务/队列/导入导出 的执行问题
    【Ecstore2.0】第三方信任登陆问题解决_备忘
    Ecstore 2.0 报表显示空白
    【Linux】 任务调度/计划 cron
    wdcp/wdlinux一键包的php5.3版本添加Zend.so 和Soap.so
    wdcp/wdlinux 在 UBUNTU/linux 中安装失败原因之创建用户
    假如女人是一种编程语言,你会更喜欢哪一种
    Linux中的ln
    wdcp/wdlinux 常用工具及命令集
    php 数组Array 删除指定键名值
  • 原文地址:https://www.cnblogs.com/Yuzao/p/6899496.html
Copyright © 2011-2022 走看看