zoukankan      html  css  js  c++  java
  • 1197:山区建小学

    1197:山区建小学
    
    时间限制: 1000 ms         内存限制: 65536 KB
    提交数: 1244     通过数: 844 
    【题目描述】
    政府在某山区修建了一条道路,恰好穿越总共
    m
    m
    个村庄的每个村庄一次,没有回路或交叉,任意两个村庄只能通过这条路来往。已知任意两个相邻的村庄之间的距离为
    d
    i
    di
    (为正整数),其中,
    0<i<m
    0<i<m
    。为了提高山区的文化素质,政府又决定从
    m
    m
    个村中选择
    n
    n
    个村建小学(设
    0<n≤m<500
    0<n≤m<500
    )。请根据给定的
    m
    m
    、
    n
    n
    以及所有相邻村庄的距离,选择在哪些村庄建小学,才使得所有村到最近小学的距离总和最小,计算最小值。
    【输入】
    第1行为
    m
    m
    和
    n
    n
    ,其间用空格间隔
    第2行为
    m−1
    m−1
     个整数,依次表示从一端到另一端的相邻村庄的距离,整数之间以空格间隔。
    例如:
    
    10 3
    2 4 6 5 2 4 3 1 3
    
    表示在
    10
    10
    个村庄建
    3
    3
    所学校。第
    1
    1
    个村庄与第
    2
    2
    个村庄距离为
    2
    2
    ,第
    2
    2
    个村庄与第
    3
    3
    个村庄距离为
    4
    4
    ,第
    3
    3
    个村庄与第
    4
    4
    个村庄距离为
    6
    6
    ,...,第
    9
    9
    个村庄到第
    10
    10
    个村庄的距离为
    3
    3
    。
    
    【输出】
    各村庄到最近学校的距离之和的最小值。
    【输入样例】
    10 2
    3 1 3 1 1 1 1 1 3
    【输出样例】
    18
    1197山区建小学

    dp[i][j]:表示在1~i个村庄中建j个小学时的路径最小值 m[i][j]:表示从i到j只建立一个小学的路径的最小值若从第i个村庄到第j个村庄只选取一个作为小学的话则选择第(i+j)/2个一开始我没懂,直到自己画了个图,假设把在5建的小学移到4,则其他村庄的距离变化如图,从4到3不会变化,所以除法向下取整不会有问题。则状态转移方程:m[i][j]=m[i][j-1]+a[i]-a[(i+j)/2]怎么理解呢?1)i+j为偶数,有以下序列,此时在2建小学    1 2 3    新加一个村庄,此时还是在2建小学    1 2 3 4    则m[1][4]=m[1][3]+(4到2的距离)a[4]-a[(1+4)/2]2)i+j为奇数,有以下序列,此时在2建小学    1 2 3 4    新加一个村庄,此时在3建小学。根据之前画的图,村庄仅有1~4时,在2、3建小学都是路径最小值,m[1][4]不会变化    1 2 3 4 5    则m[1][4]=m[1][3](小学位置变了但是值不变)+(5到3的距离)a[5]-a[(1+5)/2]所以得:初始化:dp[i][1]=m[1][i]dp[i][j]=min{dp[k][j-1]+m[k+1][i]}(1<=k<i)
    ---------------------
    作者:Always_ease
    来源:CSDN
    原文:https://blog.csdn.net/Always_ease/article/details/80527234
    版权声明:本文为博主原创文章,转载请附上博文链接!

    a[i]为每一个山区的位置
    mi[i][j],i到j之间建一个小学的路程

    dp[i][j],1~i之间建了j个小学

    注意:
    1、不要忘记初始化:dp[i][1]=mi[1][i]
    2、要保证状态转移方程中每一项都已算出来
         k>=j-1,k+1<=i,j-1>=1即j>=2

    区间DP我也不太懂,先转过来,以留后用。

  • 相关阅读:
    线段树套线段树
    hdu6800
    半平面交 poj1279
    Unity:创建了一个自定义的找子物体的脚本
    Unity:一个简单的开门动画
    hdu 4940
    hdu 4939
    hdu 4932
    hdu 4912
    AC自动机
  • 原文地址:https://www.cnblogs.com/wendcn/p/10664337.html
Copyright © 2011-2022 走看看